[Oracle] 프로시저에서 OUT 파라미터로 SYS_REFCURSOR 활용하기



원래 오라클이랑은 별로 안 친해서 프로시저에 대해 잘 몰랐는데, 프로젝트 진행 중에 레거시의 요구사행 때문에 SYS_REFCURSOR 사용법을 알게되었습니다.



[프로시저]













01











02










03










04










05










06










07










08










09










10










11










12










13










14










15










16










17










18


19










CREATE OR




REPLACE




PROCEDURE



TEST.SP_OUT_CURSOR_EXAMPLE

(









V_PARAM



IN




VARCHAR2



,

V_OUT



OUT



SYS_REFCURSOR)











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 를 넘길 수도 있다고 하니 알아두면 좋은 것 같습니다.





댓글

가장 많이 본 글