1HOON
논리적 코딩
1HOON
전체 방문자
오늘
어제
  • HOME (186)
    • ☕️ JAVA (28)
      • WhiteShip Java LIVE Study (6)
      • Effective JAVA (10)
    • 🔮 KOTLIN (4)
    • 🌱 SPRING (51)
      • 스프링 인 액션 (22)
      • JPA (18)
    • ☕️ JAVASCRIPT (6)
    • 📃 DATABASE (40)
      • ORACLE (37)
      • MSSQL (2)
    • 🐧 LINUX (4)
    • 🐳 DOCKER (5)
    • 🐙 KUBERNETES (4)
    • 🏗️ ARCHITECTURE (8)
    • 📦 ETC (26)
      • TOY PROJECT (5)
      • RECRUIT (1)
      • 그냥 쓰고 싶어서요 (14)
    • 🤿 DEEP DIVE (1)
    • 🚽 Deprecated (9)
      • PYTHON (3)
      • AWS (2)
      • HTTP 완벽가이드 (3)
      • WEB (1)

블로그 메뉴

  • 홈
  • 방명록
  • 관리

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
1HOON

논리적 코딩

[PL/SQL] 임시테이블(GTT)
📃 DATABASE/ORACLE

[PL/SQL] 임시테이블(GTT)

2018. 3. 28. 10:51

임시테이블 (GTT, Global Temporary Table)

1. 트랜잭션 GTT

트랜잭션이 살아있는 동안에만 데이터가 유지됨

1
2
3
4
5
6
CREATE GLOBAL TEMPORARY TABLE 테이블명
(
    컬럼1     데이터타입,
    ...
)
[ON COMMIT DELETE ROWS];
cs


1
2
3
4
5
6
7
CREATE GLOBAL TEMPORARY TABLE CH14_TRANC_GTT
(
      IDS        NUMBER
    , NAMES      VARCHAR2(50)
    , BIRTH_DT   DATE
)
ON COMMIT DELETE ROWS;
cs



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
DECLARE
    VN_CNT      INT := 0;
    VN_CNT2     INT := 0;
BEGIN
    INSERT INTO CH14_TRANC_GTT
    SELECT *
      FROM CH13_PHYSICIST;
    
    -- COMMIT 전 데이터 건수
    SELECT COUNT(*)
      INTO VN_CNT
      FROM CH14_TRANC_GTT;
    
    COMMIT;
    
    -- COMMIT 후 데이터 건수
    SELECT COUNT(*)
      INTO VN_CNT2
      FROM CH14_TRANC_GTT;
      
    DBMS_OUTPUT.PUT_LINE('COMMIT 전 : ' || VN_CNT);
    DBMS_OUTPUT.PUT_LINE('COMMIT 후 : ' || VN_CNT2);
END;
Colored by Color Scripter
cs



ON COMMIT DELETE ROWS 는 COMMIT 시에 로우를 삭제하라는 의미로, DML로 GTT에 데이터를 생성,수정할 때는 데이터가 남지만 COMMIT을 하게되면 모든 데이터가 사라지게 된다. ON COMMIT DELETE ROWS 는 생략이 가능하며, 생략시 디폴트로 트랜잭션 GTT가 만들어진다.


2. 세션 GTT

같은 세션 내에 있는 한 데이터가 유지되는 임시테이블.

1
2
3
4
5
6
CREATE GLOBAL TEMPORARY TABLE 테이블명
(
    컬럼1     데이터타입,
    ...
)
ON COMMIT PRESERVE ROWS;
cs


1
2
3
4
5
6
7
CREATE GLOBAL TEMPORARY TABLE CH14_SESS_GTT
(
      IDS        NUMBER
    , NAMES      VARCHAR2(50)
    , BIRTH_DT   DATE
)
ON COMMIT PRESERVE ROWS;
cs



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
DECLARE
    VN_CNT      INT := 0;
    VN_CNT2     INT := 0;
BEGIN
    INSERT INTO CH14_SESS_GTT
    SELECT *
      FROM CH13_PHYSICIST;
      
    -- COMMIT 전 데이터 건수
    SELECT COUNT(*)
      INTO VN_CNT
      FROM CH14_SESS_GTT;
      
    COMMIT;
    
    -- COMMIT 후 데이터 건수
    SELECT COUNT(*)
      INTO VN_CNT2
      FROM CH14_SESS_GTT;
      
    DBMS_OUTPUT.PUT_LINE('COMMIT 전 : ' || VN_CNT);
    DBMS_OUTPUT.PUT_LINE('COMMIT 후 : ' || VN_CNT2);
END;
Colored by Color Scripter
cs



다른 세션에 있는 사용자는 이 데이터를 공유할수 없다.

세션 GTT는 COMMIT을 하더라도 같은 세션에서만 데이터가 공유되며, 세션을 종료하면 데이터가 사라진다.


 GTT 제한사항

 - 파티션 GTT를 만들 수 없다.

 - GTT에는 외래키를 만들 수 없다.

 - GTT에는 병렬로 UPDATE DELETE MERGE 문을 실행할 수 없다.

 - GTT 컬럼으로는 중첩테이블 타입을 사용할 수 없다

 - GTT에도 인덱스를 만들 수 있다.



반응형
저작자표시 비영리 변경금지 (새창열림)

'📃 DATABASE > ORACLE' 카테고리의 다른 글

[PL/SQL] 파이프라인 테이블함수  (0) 2018.03.30
[PL/SQL] 테이블 함수  (0) 2018.03.29
[PL/SQL] DBMS_SQL (3) : 응용활용  (0) 2018.03.27
[PL/SQL] DBMS_SQL (2) : 기본활용  (0) 2018.03.26
[PL/SQL] DBMS_SQL (1) : 처리순서  (0) 2018.03.26
    '📃 DATABASE/ORACLE' 카테고리의 다른 글
    • [PL/SQL] 파이프라인 테이블함수
    • [PL/SQL] 테이블 함수
    • [PL/SQL] DBMS_SQL (3) : 응용활용
    • [PL/SQL] DBMS_SQL (2) : 기본활용
    1HOON
    1HOON

    티스토리툴바