DECLARE v_cursor SYS_REFCURSOR; v_col1 VARCHAR2(100); v_col2 VARCHAR2(100); BEGIN test.pkg_p01.p01_list('abc', 'bcd', 'Y', v_cursor); LOOP FETCH v_cursor INTO v_col1, v_col2; EXIT WHEN v_cursor%NOTFOUND; DBMS_OUTPUT.PUT_LINE(v_col1); END LOOP; CLOSE v_cursor; END;
이런 구문이 있을때
호출하는 프로시저에서 셀렉트 되는 항목이 많을때 몇가지만 into로 쓸수도 있나요?
실제로 셀렉트는 v_col1~10까지 있더라도
FETCH v_cursor INTO v_col1, v_col2;
요렇게 두개만 쓰게요
기존 프로시저가 셀렉트되는 컬럼이 늘어날수도 있어서 그때마다 수정할수 없을것 같아서요 ㅠㅠ
-- 1. 커서 리턴 프로시져 -- CREATE OR REPLACE PROCEDURE p_test ( p_deptno emp.deptno%TYPE , p_cursor OUT SYS_REFCURSOR ) IS BEGIN OPEN p_cursor FOR SELECT * FROM emp WHERE deptno = p_deptno ; END; / -- 2. 커서 반환 받아 처리 -- DECLARE v_cursor SYS_REFCURSOR; -- ROWTYPE 이나 RECORD TYPE 의 변수 사용 -- TYPE t_rec IS RECORD ( empno emp.empno %TYPE , ename emp.ename %TYPE , job emp.job %TYPE , mgr emp.mgr %TYPE , hiredate emp.hiredate%TYPE , sal emp.sal %TYPE , comm emp.comm %TYPE , deptno emp.deptno %TYPE ); -- v_rec emp%ROWTYPE; -- RowType v_rec t_rec; -- Record Type BEGIN p_test(10, v_cursor); LOOP FETCH v_cursor INTO v_rec; EXIT WHEN v_cursor%NOTFOUND; DBMS_OUTPUT.PUT_LINE(v_rec.ename); END LOOP; CLOSE v_cursor; END; /