묵시적 커서와 커서 속성
눈치챘을지 모르겠지만 지금까지 PL/SQL에서 사용했던 모든 SQL 문장이 실행됨과 동시에 내부적으로 묵시적 커서가 만들어져 사용되었다. 개발자 입장에서는 묵시적 커서가 어떤 식으로 사용됐는지 관여할 필요도, 굳이 알 필요도 없지만, 커서 속성을 사용하면 묵시적 커서에 대한 몇 가지 정보를 참조할 수 있다. 예를 들어, INSERT, UPDATE, DELETE문을 수행했을 때 몇 건의 데이터가 영향을 받았는지, 즉 몇 건의 데이터가 새로 입력되고 갱신되고 삭제되었는지 알 수 있다. 예를 들어, 사원 테이블에서 80번 부서에 속한 사원은 총 34명인데, 이를 UPDATE 하는 아래의 익명 블록을 실행해 보자.
입력
DECLARE
vn_department_id employees.department_id%TYPE := 80;
BEGIN
-- 80번 부서의 사원이름을 자신의 이름으로 갱신
UPDATE employees
SET emp_name = emp_name
WHERE department_id = vn_department_id;
-- 몇 건의 데이터가 갱신됐는지 출력
DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT);
COMMIT;
END;
결과
34
정확히 34건이 갱신됐음을 알 수 있다. SQL%ROWCOUNT라는 커서 속성을 사용해서 해당 SQL문으로 인해 실제 처리된 결과 로우 수를 참조한 것이다. SQL%ROWCOUNT에서 %ROWCOUNT가 커서 속성이며 앞에 붙은 SQL은 커서 이름을 뜻한다. 묵시적 커서의 정보를 참조할 때는 SQL로 시작되는 속성명을 사용해 참조할 수 있어 묵시적 커서를 SQL 커서라고도 한다. 묵시적 커서 정보 참조용 커서 속성을 정리하면 다음과 같다.
속성명 | 설명 |
---|---|
SQL%FOUND | 결과 집합의 패치 로우 수가 1개 이상이면 TRUE, 아니면 FALSE를 반환 |
SQL%NOTFOUND | 결과 집합의 패치 로우 수가 0이면 TRUE, 아니면 FALSE를 반환 |
SQL%ROWCOUNT | 영향 받은 결과 집합의 로우 수 반환, 없으면 0을 반환 |
SQL%ISOPEN | 묵시적 커서는 항상 FALSE를 반환(이 속성으로 참조할 때는 이미 해당 묵시적 커서는 닫힌 상태 이후이기 때문) |