일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Oracle
- #JVM
- Plugins
- Eclipse
- Like
- 소스코드 맵
- #이클립스
- 설정
- 설치
- #Oracle
- log4j2
- 스프링부트
- #오라클
- log4j
- 인텔리제이
- 스프링
- #eclipse
- 오라클
- html
- #자바가상머신
- springboot
- 환경설정
- mariadb
- 플러그인
- #자바
- CodeGlance
- Spring
- 이클립스
- #java
- IntelliJ
- Today
- Total
커피와 개발자
[Oracle]TEMPORARY TABLE 본문
TEMPORARY TABLE은 하나의 세션 동안이나 트랜젝션(COMMIT 하기 전) 동안 임시적으로 데이터를 보관하기 위해 제공된다.
세션이나 트랜젝션이 종료되면 테이블의 데이터는 TRUNCATE 된다.
일반 테이블과 다르게 테이블의 레이아웃은 dictionary에 존재하지만 데이터는 디스크 상에 존재하지 않고 메모리상에서 [INSERT] [UPDATE] [DELETE] [SELECT] 하는 테이블이다.
TEMPORARY TABLE syntax
CREATE GLOBAL TEMPORARY TABLE [테이블명]
ON COMMIT [DELETE|PRESERVE] ROWS;
ON COMMIT PRESERVE ROWS : 세션별로 데이터가 존재 (세션이 종료 시 데이터 소실)
ON COMMIT DELETE ROWS : 트랜젝션별로 데이터 존재 (COMMIT 하면 데이터 소실)
1. TEMPORARY TABLE CREATE
-- Session-Level Temporary 생성 예제
SQL>
CREATE GLOBAL TEMPORARY TABLE TBL1
(
ID NUMBER
, NM VARCHAR2(10)
, DT DATE
) ON COMMIT PRESERVE ROWS;
-- Transaction-Level Temporary 생성 예제
SQL>
CREATE GLOBAL TEMPORARY TABLE TBL2
(
ID NUMBER
, NM VARCHAR2(10)
, DT DATE
) ON COMMIT DELETE ROWS;
SQL>
SELECT TABLE_NAME
, DURATION
FROM USER_TABLES
WHERE TEMPORARY = 'Y'
AND TABLE_NAME IN ('TBL1', 'TBL2');
-- 결과
TABLE_NAME | DURATION
------------------------------
TBL1 | SYS$SESSION
TBL2 | SYS$TRANSACTION
SYS$SESSION : 세션이 종료되면 데이터 소실
SYS$TRANSACTION : 트랜젝션이 종료되면 데이터 소실
-- 하나의 임시 테이블은 더로 다른 사용자가 접근이 가능하다. 하지만 데이터는 서로 다르다.
-- 자신의 SID를 조회
SQL>
SELECT SID FROM V$MYSTAT WHERE ROWNUM = 1;
-- 결과
SID
----------
962
2. TEMPORARY TABLE DATA INSERT OR UPDATE
-- Data Insert
SQL>
INSERT INTO TBL1(ID, NM, DT) VALUES(1, '홍길동', SYSDATE);
-- Data Select (이때 다른 세션에서 조회하면 데이터가 존재하지 않는다.)
SQL> SELECT * FROM TBL1 ;
-- 결과
ID | NM | SYSDATE
-------------------------------------
1 | 홍길동 | 2015/09/25 10:52:04
-- 트랜젝션으로 설정한 경우 COMMIT 하는 순간 데이터가 사라짐
-- 다른 사용자가 접속한 경우도 데이터는 보이지 않는다.
SQL>
COMMIT;
-- 세션으로 설정한 경우 Exit하는 경우 데이터가 사라짐
-- 다른 세션으로 접속한 경우도 데이터는 보이지 않는다.
SQL> EXIT
TEMP TABLE도 일반 TABLE처럼 INSERT 또는 UPDATE 할 때 Lock을 잡는다.
Lock을 조회하면 조회된다.
* 중요
테이블의 definition 은 dictionary 에 저장된다.
하지만 SELECT TABLESPACE_NAME FROM DBA_TABLES; 를 조회해 보면 조회되지 않는다.
테이블의 정보는 dictionary (owner의 DEFAULT_TABLESPACE)에 저장되지만 실 데이터는 디스크에 저장되지 않고 메모리상에서 소멸되기 때문이다.
3. TEMPORARY TABLE DELETE
DROP TABLE T1 ;
DROP TABLE T2 ;
'데이터베이스 > Oracle' 카테고리의 다른 글
[Oracle] LIKE 연산자에서 %와 _ 문자열을 포함하기 (0) | 2022.10.11 |
---|---|
[Oracle] 쿼리에 홑따옴표를 포함하기 (0) | 2022.10.11 |
[Oracle] 두 기간 사이의 중복체크 (0) | 2022.10.11 |
[Oracle] 오라클 프로시저, 함수 수정 확인 (0) | 2019.09.30 |
[Oracle SQL Developer] 설치 (0) | 2018.02.24 |