create global temporary table 문
--------------------------------------------------------------------------------
임시 테이블은 사용자가 DML(update, insert, delete) 문을 실행한 후, 트랜젝션을 종료(commit)하면 변경된 데이터들이 테이블에 저장되지 않는 테이블이다.
어떤 응용을 개발할 때 데이터를 잠시 저장하는 변수와 같은 유형이다.
임시 테이블에 데이터를 유지시키는 방법은 2가지가 있다.
- on commit delete rows
트랜젝션을 발생시킨 후, commit문을 실행할 때 없어지는 방법
한 transaction 동안만 data를 저장(default임)
- on commit preserve rows
트랜젝션을 종료하면(commit) 테이블 내에 데이터가 저장되었다가 세션을 종료하면 임시 테이블에 저장되었던 데이터들이 모두 없어지는 방법
한 session 동안만 data를 저장
temporary table은 특정 session 또는 transaction 동안만 data를 저장한다.
• TABLE의 definition 정보는 data dictionary에 영구적으로 저장되지만, data는 일시적으로 저장된다.
• CREATE로 TABLE 생성시 SEGMENT가 할당되는 것이 아니라 첫 번째 INSERT시 할당된다.
• DML 작업시 해당 data에 대해 LOCK을 걸지 않는다.
• data 변경시 redo log에 기록이 남지 않는다.
【형식】
CREATE GLOBAL TEMPORARY TABLE table명 (column명 datatype...) [ON COMMIT DELETE ROWS | ON COMMIT PRESERVE ROWS];
일반적으로 생성하는 table에 GLOBAL TEMPORARY라는 키워드를 사용한다.
다음에 컬럼과 데이터타입을 지정하며 또는 subquery를 이용하여 생성할 수도 있다.
【예제】
SQL> connect scott/tiger
SQL> CREATE GLOBAL TEMPORARY TABLE test_temp 2 (id number(3), name varchar2(10));
Table created.
SQL> INSERT INTO test_temp VALUES(10,'Corea');
1 row created.
SQL> SELECT * FROM test_temp;
ID NAME---------- ----------
10 Corea
SQL> COMMIT;
`Commit complete.
SQL> SELECT * FROM test_temp;
no rows selected
SQL>
SQL> CREATE GLOBAL TEMPORARY TABLE temp_emp 2 AS 3 SELECT * FROM emp;
Table created.
SQL> select * from temp_emp;
no rows selected
SQL>
【예제】
on commit delete rows on commit preserve rows
SQL> create global temporary table temp_test 2 (id number(6), 3 salary number(8,2)) 4 on commit delete rows;
테이블이 생성되었습니다.
SQL> insert into temp_test values( 2 11111,12345.33);
1 개의 행이 만들어졌습니다.
SQL> select * from temp_test;
ID SALARY---------- ----------
11111 12345.33
SQL> commit;
커밋이 완료되었습니다.
SQL> select * from temp_test;
선택된 레코드가 없습니다.
SQL>
SQL> create global temporary table temp_test2 2 (id number(6), 3 salary number(8,2)) 4 on commit preserve rows;
테이블이 생성되었습니다.
SQL> insert into temp_test2 values 2 (222222, 33333.44);
1 개의 행이 만들어졌습니다.
SQL> select * from temp_test2;
ID SALARY---------- ----------
222222 33333.44
SQL> connect jijoe/jijoe_passwdConnected.
세션이 변경되었습니다.
SQL> select * from temp_test2;
선택된 레코드가 없습니다.
SQL>
참조 : http://radiocom.kunsan.ac.kr/lecture/oracle/statement_create/create_temporary_table.html
'Db > Oracle' 카테고리의 다른 글
백업및 복구 (1) | 2012.02.16 |
---|---|
join 된 테이블의 update 처리 (1) | 2012.01.30 |
like와 escape의 사용 예제 (1) | 2011.03.29 |
toad 한글깨짐 처리 (2) | 2011.02.11 |
Oracle 사용자 추가 관련 명령어 모음 (2) | 2010.08.02 |