전에 답변 달아 드렸는데... 응용을 못하시네요. 내용을 이리저리 해볼 생각은 안해 보십니까?
CREATE OR REPLACE PROCEDURE 프로시져명 (
pSLIP_DATE IN SLIP_M.SLIP_DATE%TYPE, /* 전표일자 */
) IS
vCURSOR_ID INTEGER;
vDUMMY INTEGER;
vAMOUNT NUMBER;
v_DynamicSQL VARCHAR2(1000);
BEGIN
v_DynamicSQL = ' SELECT SUM(CR_AMT) FROM SLIP_M WHERE SLIP_DATE = :slip_date ' ;
--[ Cursor내의 Block ]
BEGIN
--[ 처리를 위해 Cursor를 Open ]
vCURSOR_ID := DBMS_SQL.OPEN_CURSOR;
--[ Query를 Parse한다 ] -> 이부분이 Dynamic SQL 들어갈 부분
DBMS_SQL.PARSE(vCURSOR_ID, v_DynamicSQL, DBMS_SQL.NATIVE);
--[ 입력변수를 묶는다 ] - 입력변수 없으면 생략
DBMS_SQL.BIND_VARIABLE(vCURSOR_ID, ':SLIP_DATE', pSLIP_DATE);
--[ 출력변수를 정의한다 ]
--[ 출력변수 지정시 char이면 자리수도 지정해주어야 합니다. ]
DBMS_SQL.DEFINE_COLUMN(vCURSOR_ID, 1, vAMOUNT );
--[ 문장을 실행한다 ]
vDUMMY := DBMS_SQL.EXECUTE(vCURSOR_ID);
--[ 인출 Loop ]
LOOP
--[ 행을 버퍼로 인출하고 Exit조건을 검사한다 ]
IF DBMS_SQL.FETCH_ROWS(vCURSOR_ID) = 0 THEN
EXIT;
END IF;
--[ 버퍼에서 PL/SQL 변수로 행들을 검색한다 ]
DBMS_SQL.COLUMN_VALUE(vCURSOR_ID, 1, vAMOUNT );
END LOOP;
--[ Cursor를 닫는다 ]
DBMS_SQL.CLOSE_CURSOR(vCURSOR_ID);
--[ 예외 처리부 ]
EXCEPTION
WHEN OTHERS THEN
DBMS_SQL.CLOSE_CURSOR(vCURSOR_ID);
END;
--[ Commit ]
COMMIT WORK;
END 프로시져명;