내장 SQL을 사용할 때 발생하는 임피던스 불일치 문제를 커서를 사용하여 해결할 수 있다.
커서는 데이터베이스 쿼리 결과를 한 행씩 처리할 수 있도록 해주는 데이터베이스 객체이다. 주로 여러 행의 결과를 처리할 때 사용되며, 데이터베이스 내의 특정 위치를 가리키고, 해당 위치의 데이터를 읽거나 수정할 수 있다.
DECLARE: 커서 선언DECLARE cursor_name CURSOR FOR
SELECT column1, column2
FROM table_name;
OPEN: 커서 열기OPEN cursor_name;
FETCH: 커서에서 데이터 읽기FETCH NEXT FROM cursor_name INTO @variable1, @variable2;
CLOSE: 커서 닫기CLOSE cursor_name;
DEALLOCATE cursor_name;
예시1: 단일 레코드 검색
EXEC SQL SELECT SNAME, DEPT
INTO :VSNAME, :VDEPT
FROM STUDENT
WHERE SNO = :VSNO;
예시2: 갱신
EXEC SQL UPDATE ENROL
SET SCORE = SCORE + :NEW
WHERE CNO = 'A123';
예시3: 삽입
EXEC SQL INSERT
INTO STUDENT(SNO, SNAME, DEPT)
VALUES (:VSNO, :VSNAME, :VDEPT);
예시1: 복수 레코드 검색
학과가 VDEPT의 값과 같은 학생의 레코드 모두 검색
EXEC SQL DECLARE C1 CURSOR FOR
SELECT SNO, SNAME, YEAR
FROM STUDENT
WHERE DEPT = :VDEPT
EXEC SQL OPEN C1;
DO WHILE (SQLCODE = 0);
EXEC FETCH C1 INTO :VSNO, :VSNAME, :VYEAR;
...
EXEC SQL CLOSE C1;
예시2: 갱신
커서 C1이 가리키고 있는 레코드의 YEAR을 VYEAR의 값으로 변경
EXEC SQL UPDATE STUDENT
SET YEAR = :VYEAR
WHERE CURRENT OF C1;
예시3: 삭제
커서 C1이 가리키고 있는 ENROL 테이블의 레코드 삭제
EXEC SQL DELETE
FROM ENROL
WHERE CURRENT OF C1;
장점
단점
참고
데이터베이스론