개발은 너무해

전역 임시 테이블(temporary table) 본문

Oracle/Oracle Study

전역 임시 테이블(temporary table)

까칠 평생초보 2010.01.29 11:10
[참고문헌 : export one-on-one ORACLE]

* 전역 임시 테이블
임시테이블을 생성하는 동작은 공간 할당까지 포함하지 않으며, 다른 종류의 테이블들과는 다르게 initial 익스텐트가 할당되지 않는다. 런타임에 세션이 처음으로 임시 테이블에 데이터를 삽입하면 그 세션을 위한 임시 세그먼트가 생설될 것이다. 
각 세션은 자신만의 임시 세그먼트(존재하는 세그먼트의 익스텐트가 아니다)를 가지기 때문에 모든 사용자들은 임시 테이블을 위한 공간을 서로 다른 테이블 영역에서 할당할 수 있을 것이다.

*임시 테이블은 트리거, 체크 제약조건, 인덱스 등과 같은 영구 테이블의 많은 속성들을 갈질 수 있다.
임시 테이블에서 지원되지 않는 영구 테이블의 특성은 다음과 같다.

1. 참조 무결성 제약조건을 가질 수 없다. 임시 테이블들은 외래 키의 대상이 될 수 없고, 임시 테이블에 대해 선언된 외래 키를 가질 수도 없다.
2 .VARRAY 혹은 NESTED TABLE 유형의 열을 가질 수 없다.
3. 인덱스 구조 테이블이 될 수 없다.
4. 인덱스나 해시 클러스터 안에 있을 수 없다.
5. 분할될 수 없다.
6. ANAYLYZE 명령어를 통해 생성된 통계 정보를 가질 수 없다.

SQL> create global temporary table temp_table_session
  2  on commit preserve rows
  3  as select * from dept where 1=2;

Table created.

SQL> create global temporary table temp_table_transaction
  2  on commit delete rows
  3  as
  4  select * from dept where 1=2;

Table created.

SQL> create global temporary table temp_table_default  -- 아무것도 지정하지 않음.
  2  as select * from dept where 1=2;

Table created.

SQL> insert into temp_table_session values(70,'SCOTT','TIGER');

1 row created.

SQL> insert into temp_table_transaction values(70,'SCOTT','TIGER');

1 row created.

SQL> insert into temp_table_default values(70,'SCOTT','TIGER');

1 row created.

SQL> select session_cnt, transaction, default_cnt
  2  from (select count(*) session_cnt from temp_table_session) a,
  3  (select count(*) transaction from temp_table_transaction) b,
  4  (select count(*) default_cnt from temp_table_default) c
  5  /

SESSION_CNT TRANSACTION DEFAULT_CNT
-------------- -------------- -------------
                    1                    1                   1

SQL> commit;

Commit complete.

SQL> select session_cnt, transaction, default_cnt
  2  from (select count(*) session_cnt from temp_table_session) a,
  3  (select count(*) transaction from temp_table_transaction) b,
  4  (select count(*) default_cnt from temp_table_default) c
  5  /

SESSION_CNT TRANSACTION DEFAULT_CNT
-------------- -------------- --------------
                   1                     0                    0

SQL>

나의 의견 : 
아무것도 지정해 주지 않은 것은 transaction 설정을 default로 가지고 있는가가 저는 궁금합니다.
위 테스트의 결과를 보면 default 값으로 가지고 있지 않나 하는 생각이 듭니다.
0 Comments
댓글쓰기 폼