② 커서 변수 사용하기
커서 변수는 커서를 가리키므로 당연히 커서를 정의하는 쿼리가 있어야 하는데, 커서 변수와 쿼리문을 연결할 때는 다음과 같이 OPEN…FOR 구문을 사용한다.
OPEN 커서 변수명 FOR select 문;
커서 변수의 특징 중 하나가 여러 개의 쿼리를 연결해서 사용할 수 있다는 점이라고 했는데, 위 구문을 보면 그 이유를 이해할 수 있을 것이다. 즉 OPEN…FOR 구문에서 SELECT문의 세부 내용은 변경 가능하므로 여러 개의 쿼리를 한 커서 변수에 할당해서 사용할 수 있는 것이다. 특히 선언한 커서 타입이 약한 커서 타입이면 SELECT문에 따라 사용할 수 있는 커서 결과 집합의 종류는 무궁무진해진다.
예를 들어, 다음과 같이 강한 커서 타입을 선언했다고 해 보자.
TYPE test_curtype IS REF CURSOR RETURN departments%ROWTYPE;
test_curvar test_curtype;
강한 커서 타입은 결과 집합의 구조가 이미 결정되었으므로 실제 커서를 정의하는 쿼리도 이에 맞춰줘야 한다.
OPEN test_curvar FOR SELECT * FROM departments; -- (O) 정상
OPEN test_curvar FOR SELECT department_id FROM departments; -- (X) department_id만 선택 했기 때문
OPEN test_curvar FOR SELECT * FROM employees; -- (X) 전혀 다른 사원 테이블을 조회하므로
하지만 다음과 같이 약한 커서 타입을 선언했을 때는 여러 형태의 쿼리를 정의해 사용할 수 있다.
TYPE test_curtype IS REF CURSOR;
test_curvar test_curtype;
OPEN test_curvar FOR SELECT * FROM departments; -- (O) 정상
OPEN test_curvar FOR SELECT department_id FROM departments; -- (O) 정상
OPEN test_curvar FOR SELECT * FROM employees; -- (O) 정상