정상구문
===================================================================================================
===================================================================================================
CREATE OR REPLACE PROCEDURE ParamCursor_Test (param_deptno emp.deptno%TYPE) IS -- Parameter가 있는 커서의 선언 CURSOR emp_list(v_deptno emp.deptno%TYPE) IS SELECT ename FROM emp WHERE deptno = v_deptno; BEGIN DBMS_OUTPUT.ENABLE; DBMS_OUTPUT.PUT_LINE(' ====== 입력한 부서에 해당하는 사람들 ====== '); -- Parameter변수의 값을 전달(OPEN될 때 값을 전달한다) FOR emplst IN emp_list(param_deptno) LOOP DBMS_OUTPUT.PUT_LINE('이름 : ' || emplst.ename); END LOOP; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('ERR MESSAGE : ' || SQLERRM); END; ===================================================================================================
파라미터가 없을 경우
===================================================================================================CREATE OR REPLACE PROCEDURE ParamCursor_Test (param_deptno emp.deptno%TYPE) IS CURSOR emp_list IS SELECT enameINTO param_deptnoFROM emp WHERE deptno = param_deptno;
BEGIN DBMS_OUTPUT.ENABLE; DBMS_OUTPUT.PUT_LINE(' ====== 입력한 부서에 해당하는 사람들 ====== '); FOR emplst IN emp_list LOOP DBMS_OUTPUT.PUT_LINE('이름 : ' || emplst.ename); END LOOP; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('ERR MESSAGE : ' || SQLERRM); END; =================================================================================================== 이 경우
"PLS-00403: SELECT/FETCH 문에 'PARAM_DEPTNO' 식을 INTO 대상으로 사용될 수 없습니다"
에러가 발생한다.
즉, 외부의 변수를 커서의 SELECT문 안에서는 사용할 수 없는거로 보임.
그렇기 때문에 따로 파라미터를 정의해줘서 전달함.
'ORACLE > PL/SQL' 카테고리의 다른 글
Anonymous Procedure(익명 프로시져) - 스칼라 데이터타입 실습 (0) | 2013.02.21 |
---|---|
오라클 트리거(Trigger) 실습중 (0) | 2012.03.25 |
파라미터가 있는 커서 (0) | 2012.03.22 |
오라클 커서(CURSOR) (0) | 2012.03.21 |
[문제]암시적 커서 (0) | 2012.03.21 |