'동적 SQL'에 해당되는 글 1건

  1. 2017.01.24 :: 오라클의 동적 PL SQL 작성 - EXECUTE IMMEDIATE
데이터베이스 2017. 1. 24. 02:11


PL SQL 작성 시 동적으로 DDL구문  또는 SELECT/INSERT/UPDATE/DELETE 구문을 수행해야 할 때가 있다.

이때 유용하게 사용하는 것이 EXECUTE IMMEDIATE 문법이다.


SCOTT 계정의 테이블들의 건수를 TBL_CNT_LIST라는 테이블에 INSERT하는 예시로 EXECUTE IMMEDIATE 구문을 이해해보자!


1. SCOTT 계정으로 생성된 테이블들의 레코드 건수 정보를 INSERT할 TBL_CNT_LIST 테이블 생성


1
2
3
4
CREATE TABLE TBL_CNT_LIST(
TBL_NM      VARCHAR2(30),
CNT         NUMBER(10)
);
cs

2. SCOTT계정의 테이블 목록으로 동적쿼리를 생성
   - 예시가 심플하여 PL SQL에 짧지만 DDL 및 DML 구문을 활용하여 복잡한 업무를 처리할 수 있다. 
   - 필요하다면 위의 TBL_CNT_LIST 테이블도 PL SQL 구문안에서 처리할 수 도 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
DECLARE
BEGIN
    -- 테이블 건수 정보 테이블의 데이터 삭제
    DELETE FROM TBL_CNT_LIST;
    FOR X IN ( -- SCOTT 계정의 테이블 목록을 활용하여 INSERT 구문을 동적으로 생성한다.
                SELECT 'INSERT INTO TBL_CNT_LIST SELECT ' || CHR(39|| T.TABLE_NAME || CHR(39|| ' AS TBL_NM, COUNT(*) AS CNT FROM ' || T.TABLE_NAME AS INS_SQL
                  FROM USER_TABLES T
                 WHERE 1=1
    )
    LOOP
        -- EXECUTE IMMEDIATE 구문을 사용하여 INSERT 구문 수행
        EXECUTE IMMEDIATE X.INS_SQL;
    END LOOP;
    COMMIT;
END;
/
cs

3. 결과 보기

1
2
3
SELECT *
  FROM TBL_CNT_LIST T
 ORDER BY T.TBL_NM
cs




'데이터베이스' 카테고리의 다른 글

오라클 권한 조회  (0) 2017.06.28
오라클 계정과 권한  (0) 2017.06.23
오라클 TABLESPACE와 DATAFILE  (0) 2017.06.16
TIMESTAMP 연산  (0) 2017.05.11
오라클 - PIVOT과 UNPIVOT  (0) 2017.02.02
posted by 생각퍼즐
: