DBMS/오라클 PLSQL
프로시져 실행 샘플 - OUT 값이 여러행인 경우
choi121xx
2015. 1. 21. 17:33
CREATE OR REPLACE PROCEDURE SCOTT.SP_TEST
(
P_PJT_CD IN VARCHAR2,
PC_CURSOR OUT SYS_REFCURSOR
) IS
V_RESULT_CD VARCHAR2(30 CHAR) := '';
V_RESULT_MSG VARCHAR2(500 CHAR) := '';
v_CNT NUMBER(22):=0;
v_id varchar(15 char) :='';
E_USER_ERROR_NO_DATA_FOUND EXCEPTION;
V_CODE VARCHAR(30 CHAR) := '';
V_MSG VARCHAR(30 CHAR) := '';
BEGIN
dbms_output.put_line('Start!!!!!-->');
begin
select row_id
into v_id
from TEST
where row_id ='9999';
-- exception
-- when no_data_found then
-- dbms_output.put_line('no data found');
-- V_CODE
-- RAISE E_USER_ERROR_NO_DATA_FOUND;
end;
OPEN PC_CURSOR
FOR
SELECT
'0000' AS RESULT_CD,
'111' AS RESULT_MSG
FROM DUAL;
dbms_output.put_line('end-->'||V_RESULT_MSG);
--EXCEPTION
-- WHEN OTHERS THEN
-- OPEN PC_CURSOR
-- FOR
-- SELECT
-- '333' AS RESULT_CD,
-- '444' AS RESULT_MSG
-- FROM DUAL;
END;
-------------------------------------------------------------
DB툴에서 아래 내용을 실행
------------------------------------------------
-- 프로시져 실행
-------------------------------------------------
DECLARE
i_counter integer;
v_cursor SYS_REFCURSOR;
v_RESULT_CD varchar2(100);
v_RESULT_MSG varchar2(500);
BEGIN
SCOTT.SP_TEST( P_PJT_CD => '',
PC_CURSOR => v_cursor);
i_counter := 0;
LOOP
FETCH v_cursor
INTO v_RESULT_CD,v_RESULT_MSG;
EXIT WHEN v_cursor%NOTFOUND;
i_counter := i_counter + 1;
DBMS_OUTPUT.PUT_LINE('결과:'||v_RESULT_CD|| v_RESULT_MSG);
END LOOP;
DBMS_OUTPUT.PUT_LINE('COUNT: ' || i_counter);
CLOSE v_cursor;
END;