더북(TheBook)

② 커서 변수 사용하기

커서 변수는 커서를 가리키므로 당연히 커서를 정의하는 쿼리가 있어야 하는데, 커서 변수와 쿼리문을 연결할 때는 다음과 같이 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) 정상
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.