더북(TheBook)

① 커서 변수 선언하기

커서 변수를 선언하는 방법에는 두 가지가 있는데, 첫 번째는 참조용 커서 타입을 생성하고 나서 이 타입에 대한 커서 변수를 선언하는 방법이다.

    ⓐ TYPE 커서_타입명 IS REF CURSOR [ RETURN 반환 타입 ] ;
    ⓑ 커서_변수명 커서_타입명;

위 구문처럼 커서 변수 선언은, 먼저 커서 타입을 선언한 뒤 선언한 커서 타입형으로 커서 변수를 선언하는 2단계로 이루어 진다. 커서 타입 선언 구문의 “RETURN 반환 타입”에서 반환 타입은 해당 커서가 반환하는 결과 집합을 나타내며, ‘%ROWTYPE’ 속성을 사용해서 정의한다. 예컨대 부서 테이블에 있는 모든 컬럼을 결과 집합으로 하는 커서에 대한 커서 타입을 선언할 때, 반환 타입은 “departments%ROWTYPE” 형태로 정의한다. 테이블의 특정 컬럼 값을 받는 변수를 선언할 때는, “변수명 테이블명.컬럼명%TYPE” 이라고 명시했지만, 커서가 반환하는 결과는 한 개 이상의 컬럼, 즉 레코드 타입이므로 %TYPE 대신 %ROWTYPE을 사용한다.

“RETURN 반환 타입”은 생략이 가능한데, 생략할 때를 약한week 커서 타입이라 하고 생략하지 않는 경우를 강한strong 커서 타입이라고 한다. 즉 반환 타입을 명시하는 것은 해당 커서의 결과 집합을 고정하는 것이므로 강한 타입이라 하는 반면, 명시하지 않는 경우는 결과 집합이 유동적이므로 약한 타입이라고 부르는 것이다.

    TYPE dep_curtype IS REF CURSOR RETURN departments%ROWTYPE; -- 강한 커서 타입
    TYPE dep_curtype IS REF CURSOR;                            -- 약한 커서 타입

커서 변수를 선언하는 또 다른 방법은, 오라클에서 제공하는 빌트인 커서 타입인 SYS_REFCURSOR이란 타입을 사용하는 것이다. 따라서 SYS_REFCURSOR를 사용할 때는 별도로 커서 타입을 선언할 필요 없이 다음과 같이 커서 변수만 선언하면 된다.

    test_cursor SYS_REFCURSOR;

빌트인 커서 타입이므로(결과 집합이 고정되어 있지 않으므로) 당연히 SYS_REFCURSOR는 약한 커서 타입에 속한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.