DB/ORACLE

[ORACLE] 프로시저 안에 테이블명 변수 처리. - 2 (EXECUTE IMMEDIATE)

배고파요 2023. 9. 21. 16:29
728x90

2023.09.14 - [DB/ORACLE] - [ORACLE] 프로시저 안에 테이블명 변수 처리하기.

 

[ORACLE] 프로시저 안에 테이블명 변수 처리하기.

📍 ? ㅇㅇ 출처 : https://okky.kr/questions/447897 https://grandma-coding.tistory.com/entry/OracleREGEXPSUBSTR-%EC%BD%A4%EB%A7%88%EB%A1%9C-%EB%B6%84%EB%A6%AC%EB%90%9C-%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84-%EC%97%AC%EB%9F%AC-%ED%96%89%EC%9C%BC%EB%A1%9C-

gloria94682015.tistory.com

 

 

📍 EXECUTE IMMEDIATE K_QUERY INTO   GET_SEQ;

📍 EXECUTE IMMEDIATE V_QUERY USING GET_SEQ;

CREATE OR REPLACE PROCEDURE SET_INSERT (STR_TB_NAME_1 IN VARCHAR2, STR_TB_NAME_2 IN VARCHAR2)
IS
    
    K_QUERY         VARCHAR2(1000);
    V_QUERY         VARCHAR2(5000);
    GET_SEQ         VARCHAR(20);
    
BEGIN 
        K_QUERY := q'$ SELECT TRIM(TO_CHAR(TEST_SEQ.nextval, '09999999999999999999')) FROM DUAL $';
        BEGIN -- 단일 값을 리턴받을때 -- K_QUERY 실행해서 나오는 값을 GET_SEQ 에 넣음.
            EXECUTE IMMEDIATE K_QUERY INTO GET_SEQ;
        END;
        
        DBMS_OUTPUT.PUT_LINE ('GET_SEQ :  ' || GET_SEQ); -- // 00000000000000000152 이런 형태.
        
        V_QUERY := q'$ INSERT ALL INTO $';
        V_QUERY := V_QUERY || STR_TB_NAME_1;
        V_QUERY := V_QUERY || q'$ (SEQ_NO, TEST_COL_1) VALUES (:GET_SEQ, TEST_COL_1) $'
                           || q'$ INTO  $';
        V_QUERY := V_QUERY || STR_TB_NAME_2;
        V_QUERY := V_QUERY || q'$ (SEQ_NO, TEST_COL_2) VALUES (:GET_SEQ, TEST_COL_2) $'
                           || q'$ SELECT 'DATA_1' AS TEST_COL_1, 'DATA_2' AS TEST_COL_2 FROM DUAL $';
                           
        BEGIN -- INSERT, UPDATE, DELETE 구문 실행 -- GET_SEQ 를 써서 V_QUERY 실행.
            EXECUTE IMMEDIATE V_QUERY USING GET_SEQ;
        END;
        
        COMMIT;
END;

 

 


출처 : http://gurubee.net/article/80689

https://itns3200.tistory.com/91

https://dingadinga.tistory.com/171

 


개발 공부를 위한 블로그 입니다. 

오류가 있다면 댓글로 알려주세요! 

감사합니다.

728x90