[오라클 PL/SQL] 오라클 임시 테이블 – 트랜잭션 GTT란?
- Database(데이터베이스)/Oracle
- 2019. 12. 9. 01:00
안녕하세요.
오늘은 오라클에서 제공하는 임시테이블에 대해서 알아 보려고 합니다.
오라클에서 제공하는 임시테이블은 크게 두 가지 유형이 있습니다. 첫 번째로는 트랜잭션 GTT(Global Temporary Table) 과 세션 GTT로 두 가지 유형이 있습니다.
그 중에서 오늘은 트랜잭션 GTT(Global Temporary Table)에 대해서 알려드리려고 합니다.
먼저 트랜잭션 GTT 구문은 아래와 같습니다.
트랜잭션 GTT 구문
CREATE GLOBAL TEMPORARY TABLE 테이블 명 (
컬럼1 테이터타입,
…
…)
[ON COMMIT DELETE ROWS];
트랜잭션 GTT 구문은 위와 같습니다.
임시테이블과 일반 테이블 생성 구문과의 차이점은 CREATE 다음에 “GLOBAL TEMPORARY”와 맨 마지막에 “ON COMMIT DELETE ROWS”란 구문이 추가된다는 점입니다.
“ON COMMIT DELETE ROWS”는 COMMIT 시에 로우를 삭제하라는 의미로, DML로 GTT 테이블에 데이터를 생성, 수정할 당시에는 데이터가 남아 있지만 COMMIT을 실행하면 모든 데이터가 없어 진다는 얘기 입니다.
트랜잭션이 살아있는 동안에만 데이터가 유지되므로, 트랜잭션 GTT 라고 부르는 것이며, 생략이 가능하므로 이 구문을 빼고 GTT를 생성하게 되면 디폴트로 트랜잭션 GTT가 만들어 집니다.
그럼 이제 실제로 트랜잭션 GTT를 생성해 보도록 하겠습니다.
트랜잭션 GTT 생성
1 2 3 4 5 6 |
CREATE GLOBAL TEMPORARY TABLE stu_gtt( name varchar2(100), age number, grade number ) ON COMMIT DELETE ROWS; |
위와 같이 stu_gtt 트랜잭션 GTT 테이블을 생성하였습니다.
그럼 이제 stu_gtt 테이블에 데이터를 넣고, 트랜잭션 내에서 데이터가 유지되는지 확인해 보도록 할게요.
데이터 확인
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
DECLARE vn_cnt int := 0; vn_cnt2 int := 0; BEGIN
--stu_gtt 테이블에 데이터 넣기 INSERT INTO stu_gtt(name, age, grade) VALUES('범범조조', 27, 3);
INSERT INTO stu_gtt(name, age, grade) VALUES('강호동', 37, 2);
INSERT INTO stu_gtt(name, age, grade) VALUES('유재석', 49, 2);
--COMMIT 전 데이터 개수 출력 SELECT COUNT(*) INTO vn_cnt FROM stu_gtt;
COMMIT;
--COMMIT 후 데이터 개수 출력 SELECT COUNT(*) INTO vn_cnt2 FROM stu_gtt;
DBMS_OUTPUT.PUT_LINE('COMMIT 전 데이터 개수 : ' || vn_cnt); DBMS_OUTPUT.PUT_LINE('COMMIT 후 데이터 개수 : ' || vn_cnt2); END; |
실행 결과
위와 같이 트랜잭션 GTT로 생성한 stu_gtt 테이블의 데이터를 COMMIT 전과 후로 보았을 때에 트랜잭션이 유지될 때에는 INSERT 한 데이터 3개가 COUNT로 출력되는 것을 볼 수 있고, COMMIT 후에는 임시테이블이 사라지면서 COUNT 개수가 0개로 출력된 것을 확인하실 수 있습니다.
감사합니다.^^
'Database(데이터베이스) > Oracle' 카테고리의 다른 글
[오라클 에러] 오라클 ORA-01722 : Invalid Number 에러 해결 방법 (0) | 2019.12.11 |
---|---|
[오라클 PL/SQL] 오라클 임시 테이블 – 세션 GTT란? (0) | 2019.12.10 |
[오라클 SQL] 오라클 UNPIVOT 이용하여 컬럼을 로우로 전환(변환)하기 (0) | 2019.12.07 |
[오라클 SQL] 오라클 PIVOT 절을 이용하여 로우를 컬럼으로 전환(변환)하기 (0) | 2019.12.06 |
[오라클 PL/SQL] PL/SQL 커서(Cursor) FOR문으로 생성하기 (0) | 2019.12.04 |
이 글을 공유하기