상세 컨텐츠

본문 제목

Procedure 내에서 Procedure, Function, Table 등 생성하기

DataBase/Oracle

by 탑~! 2012. 7. 16. 10:12

본문

권한부여.


SQL> GRANT CREATE ANY TABLE TO 유저; SQL> GRANT EXECUTE ON DBMS_SQL TO 유저;



CREATE OR REPLACE PROCEDURE GITS.PIT_GENERATE_PLSQL

    /***************************************************************************

        PURPOSE     ORACLE PL/SQL 문장을 입력 받아 실행한다.(Function Create)


        REVISIONS:

        Ver        Date        Author           Description

        ---------  ----------  ---------------  --------------------------------

        1.0        2012-07-06      탑           1. Created this package.

    ***************************************************************************/

    (

            I_PLSQL_SYNTAX              IN      VARCHAR2

        ,   I_REQUEST_USER_ID           IN      TIT_USER_MST.USER_ID%TYPE

        ,   I_REQUEST_PROGRAM_ID        IN      TIT_PROGRAM_MST.PROGRAM_ID%TYPE

        ,   O_ERROR_CD                  OUT     VARCHAR2

        ,   O_ERROR_MSG                 OUT     VARCHAR2

    )

    AUTHID CURRENT_USER

    IS

            S_PROCESS_NAME                      VARCHAR2(50)    :=  '[PIT_GENERATE_PLSQL]';

            S_RECORD_COUNT                      NUMBER          :=  0;

            ERROR01                             EXCEPTION;


            S_PLSQL_SYNTAX                      VARCHAR2(32767);

            OPEN_CURSOR                         INTEGER;

            EFFECTED_ROWS                       INTEGER;

    BEGIN


        /*********************************************************************

            요청 사용자 ID Check

        *********************************************************************/

        BEGIN

            SELECT  COUNT(USER_SID)

            INTO    S_RECORD_COUNT

            FROM    TIT_USER_MST

            WHERE   USER_ID             =       I_REQUEST_USER_ID;

            

            IF      S_RECORD_COUNT      =       0

            THEN

                    O_ERROR_CD          :=      'ERROR';

                    O_ERROR_MSG         :=      S_PROCESS_NAME||'Request User does not Exists.';

                    RAISE   ERROR01;

            END IF;

        END;


        /*********************************************************************

            PL SQL 실행

        *********************************************************************/

        BEGIN

        

            S_PLSQL_SYNTAX := '' || 'CREATE OR REPLACE ' || I_PLSQL_SYNTAX || '';

            

            

            OPEN_CURSOR := DBMS_SQL.OPEN_CURSOR;          

            DBMS_SQL.PARSE(OPEN_CURSOR, S_PLSQL_SYNTAX ,DBMS_SQL.NATIVE);

            

            EFFECTED_ROWS := DBMS_SQL.EXECUTE(OPEN_CURSOR);

            DBMS_SQL.CLOSE_CURSOR(OPEN_CURSOR);

            

            --EXECUTE IMMEDIATE 'CREATE OR REPLACE '|| I_PLSQL_SYNTAX;

            

            O_ERROR_CD                  :=      'OK';

            O_ERROR_MSG                 :=      S_PROCESS_NAME || ' was executed.';

        END;

         

        /*********************************************************************

            오류 처리

        *********************************************************************/

        EXCEPTION

            WHEN    ERROR01             THEN

                    RETURN;

            WHEN    OTHERS              THEN

                    RAISE;

                    RETURN;

                    

    END         PIT_GENERATE_PLSQL;

/

관련글 더보기