[Oracle] 프로시저에서 OUT 파라미터로 SYS_REFCURSOR 활용하기
Database/Oracle / 2010. 6. 23. 09:49
원래 오라클이랑은 별로 안 친해서 프로시저에 대해 잘 몰랐는데, 프로젝트 진행 중에 레거시의 요구사행 때문에 SYS_REFCURSOR 사용법을 알게되었습니다.
[프로시저]
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 |
CREATE OR REPLACE PROCEDURE TEST.SP_OUT_CURSOR_EXAMPLE ( V_PARAM IN VARCHAR2, IS BEGIN OPEN V_OUT FOR SELECT 'TEST' AS "제목", V_PARAM AS "내용" FROM DUAL; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN OTHERS THEN RAISE; END SP_OUT_CURSOR_EXAMPLE; GO |
03 라인에 보면 "OUT SYS_REFCURSOR" 라는 타입으로 정의되어 있습니다. 결과값을 담는 파라미터에 CURSOR 를 넘기는 것으로 생각하면 될 것 같습니다.
08~11 라인까지 자신이 넘기고 싶은 쿼리를 정의하여 07 라인을 통해 V_OUT 에 담습니다.
토드에서 아래와 같은 쿼리를 실행하여 위의 프로시저가 정상적으로 생성이 되었는지 확인합니다.
exec SP_OUT_CURSOR_EXAMPLE( 'param1', :C );
실행을 하게되면 변수에 대해 어떤 타입인지 선택을 하는 창이 뜹니다. Type을 Cursor로 선택하고 "OK"를 누릅니다.
아래와 같이 결과가 나오면 정상적으로 된 것입니다.
함수의 결과 값으로 SYS_REFCURSOR 를 넘길 수도 있다고 하니 알아두면 좋은 것 같습니다.