임시테이블 (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; | 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; | 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 |