(PL/SQL) EXECUTE IMMEDIATE Dynamic SQL
CREATE OR REPLACE PROCEDURE SP_DEL_PROCEDURE
(
TABLE_NAME IN VARCHAR2 ,
TABLE_PARAM IN VARCHAR2
)
IS
PD_ERRNUM NUMBER;
PD_ERRMSG VARCHAR2 (200);
PD_SDATE DATE ;
PD_DELCOUNT NUMBER ;
PD_QUERY VARCHAR2(100);
BEGIN
--프로시저 실행한 날짜 셋팅
SELECT SYSDATE INTO PD_SDATE FROM DUAL ;
--DELETE 프로시저 실행
PD_QUERY := 'DELETE FROM ' || TABLE_NAME ||
' WHERE ' || TABLE_PARAM || ';';
EXECUTE IMMEDIATE PD_QUERY ;
PD_DELCOUNT := SQL%ROWCOUNT ;
--성공시 LOG TABLE INSERT
INSERT INTO PROCEDURE_LOG_T
(PD_TABLE_NAME , PD_SUCCESS , PD_SDATE , PD_EDATE , PD_MSG , PD_DELCOUNT ,PD_WHERE )
VALUES
(TABLE_NAME ,'SUCCESS', PD_SDATE , SYSDATE, 'DELETE PROC SUCCESS' , PD_DELCOUNT , TABLE_PARAM );
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
PD_ERRNUM := sqlcode;
PD_ERRMSG := substr(sqlerrm , 1, 99);
PD_DELCOUNT := 0 ;
--실패시 LOG TABLE INSERT
INSERT INTO PROCEDURE_LOG_T
(PD_TABLE_NAME , PD_SUCCESS , PD_SDATE , PD_EDATE , PD_MSG , PD_DELCOUNT ,PD_WHERE)
VALUES
(TABLE_NAME ,'FAIL', PD_SDATE ,SYSDATE,'ERROR:'||PD_ERRNUM||'-'||PD_ERRMSG , PD_DELCOUNT , TABLE_PARAM);
END;
/