반응형
/********************************************************************************************
-- Title : [ORA10g] 임시 테이블 관리 - ver.dbrang
-- Reference : dbrang.tistory.com
-- Key word : 임시테이블 temporary table
********************************************************************************************/

/*
-- on commmit delete rows(default)
-- transaction별로 데이터 존재
*/
-- 테이블 생성(on commit delete rows)
CREATE GLOBAL TEMPORARY TABLE scott.tmp_tbl1
(a NUMBER, b VARCHAR2(10))
ON COMMIT DELETE ROWS;

-- 데이터 입력
INSERT INTO scott.tmp_tbl1 VALUES (1,'111');
INSERT INTO scott.tmp_tbl1 VALUES (2,'333');

-- 확인
SELECT * FROM scott.tmp_tbl1;

-- 커밋
COMMIT;

-- 데이터 삭제 확인(commit에 의해 데이터 삭제 됨)
SELECT * FROM scott.tmp_tbl1;

/*
-- on commmit preserve rows
-- session별로 데이터 존재
*/
-- 테이블 생성(on commit preserve rows)
CREATE GLOBAL TEMPORARY TABLE scott.tmp_tbl2
(a NUMBER, b VARCHAR2(10))
ON COMMIT PRESERVE ROWS;

-- 데이터 입력
INSERT INTO scott.tmp_tbl2 VALUES (111,'111');
INSERT INTO scott.tmp_tbl2 VALUES (222,'333');

-- 확인
SELECT * FROM scott.tmp_tbl2;

-- 커밋
COMMIT;

-- 데이터 존재 확인(commit에 의해 데이터 삭제 안 됨)
SELECT * FROM scott.tmp_tbl2;


/*
-- 임시테이블 확인
-- dba_tables에는 있지만, dba_segments에는 없음. what does it mean?
*/
SELECT * FROM dba_tables
WHERE owner = 'SCOTT' AND table_name LIKE 'TMP_TBL%';

SELECT * FROM dba_segments
WHERE owner = 'SCOTT' AND segment_name LIKE 'TMP_TBL%';


/*
-- 임시테이블 삭제
*/
-- 세션 확인
SELECT 'USER: ' || s.username || ', SID: '|| s.sid || ', SERIAL #: ' || s.serial# "USER holding lock"
FROM v$lock i, dba_objects o, v$SESSION s
WHERE i.id1 = o.OBJECT_ID
AND s.sid = i.sid
AND o.owner = 'SCOTT'

-- 세션 kill(다른 세션에서 테스트)
ALTER system KILL SESSION '146, 49'; 

-- 테이블 삭제
DROP TABLE scott.tmp_tbl1;
DROP TABLE scott.tmp_tbl2;
반응형

+ Recent posts