본문 바로가기

자기 개발/Oracle

(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; 

   /

'자기 개발 > Oracle' 카테고리의 다른 글