创建全局临时表
ON COMMIT DELETE ROWS子句指示应在事务提交时或会话结束时删除数据
CREATE GLOBAL TEMPORARY TABLE lh_temp_table (
id NUMBER,
description VARCHAR2(20)
)
ON COMMIT DELETE ROWS;
INSERT INTO lh_temp_table VALUES (1, ‘ONE’);
SELECT COUNT() FROM lh_temp_table;
提交后就没有数据了
COMMIT;
SELECT COUNT() FROM lh_temp_table;
ON COMMIT PRESERVE ROWS子句指示行应在事务结束后继续存在。它们只会在会话结束时被删除。
CREATE GLOBAL TEMPORARY TABLE my_temp_table (
id NUMBER,
description VARCHAR2(20)
)
ON COMMIT PRESERVE ROWS;
INSERT INTO my_temp_table VALUES (1, ‘ONE’);
COMMIT;
SELECT COUNT() FROM my_temp_table;
重新连接后,数据才会没有的。
查看数据没有了
SELECT COUNT() FROM my_temp_table;
全局临时表和撤消
DROP TABLE my_temp_table PURGE;
CREATE TABLE my_temp_table (
id NUMBER,
description VARCHAR2(20)
);
INSERT INTO my_temp_table
WITH data AS (
SELECT 1 AS id
FROM dual
CONNECT BY level < 10000
)
SELECT rownum, TO_CHAR(rownum)
FROM data a, data b
WHERE rownum <= 1000000;
查看插入的数据
使用的撤消
SELECT t.used_ublk,
t.used_urec
FROM v t r a n s a c t i o n t , v transaction t, v transactiont,vsession s
WHERE s.saddr = t.ses_addr
AND s.audsid = SYS_CONTEXT(‘USERENV’, ‘SESSIONID’);
SELECT used_ublk,used_urec from v$transaction;
V$TRANSACTION 列出系统中的活动事务。
USED_UBLK:使用的撤消块数
USED_UREC:使用的撤消记录数
SES_ADDR:用户会话对象地址
创建临时表
DROP TABLE my_temp_table PURGE;
CREATE GLOBAL TEMPORARY TABLE my_temp_table (
id NUMBER,
description VARCHAR2(20)
)
ON COMMIT PRESERVE ROWS;
INSERT INTO my_temp_table
WITH data AS (
SELECT 1 AS id
FROM dual
CONNECT BY level < 10000
)
SELECT rownum, TO_CHAR(rownum)
FROM data a, data b
WHERE rownum <= 1000000;
查看撤消
CREATE TABLE lh_temp_table (
id NUMBER,
description VARCHAR2(20)
);
SET AUTOTRACE ON STATISTICS;
INSERT INTO lh_temp_table
WITH data AS (
SELECT 1 AS id
FROM dual
CONNECT BY level < 10000
)
SELECT rownum, TO_CHAR(rownum)
FROM data a, data b
WHERE rownum <= 1000000;
DROP TABLE lh_temp_table PURGE;
CREATE GLOBAL TEMPORARY TABLE lh_temp_table (
id NUMBER,
description VARCHAR2(20)
)
ON COMMIT PRESERVE ROWS;
SET AUTOTRACE ON STATISTICS;
INSERT INTO lh_temp_table
WITH data AS (
SELECT 1 AS id
FROM dual
CONNECT BY level < 10000
)
SELECT rownum, TO_CHAR(rownum)
FROM data a, data b
WHERE rownum <= 1000000;
专用临时表
创建专用临时表时所使用的前缀ORA P T T ∗ ∗ O N C O M M I T D R O P D E F I N I T I O N : 在 事 务 结 束 时 或 会 话 结 束 时 删 除 表 ∗ ∗ C R E A T E P R I V A T E T E M P O R A R Y T A B L E o r a PTT **ON COMMIT DROP DEFINITION:在事务结束时或会话结束时删除表** CREATE PRIVATE TEMPORARY TABLE ora PTT∗∗ONCOMMITDROPDEFINITION:在事务结束时或会话结束时删除表∗∗CREATEPRIVATETEMPORARYTABLEoraptt_lh_temp_table (
id NUMBER,
description VARCHAR2(20)
)
ON COMMIT DROP DEFINITION;
INSERT INTO ora$ptt_lh_temp_table VALUES (1, ‘ONE’);
SELECT COUNT(*) FROM ora$ptt_lh_temp_table;
COMMIT;
SELECT COUNT(*) FROM ora$ptt_lh_temp_table;
ON COMMIT PRESERVE DEFINITION:在会话结束时删除
CREATE PRIVATE TEMPORARY TABLE ora$ptt_zs_temp_table (
id NUMBER,
description VARCHAR2(20)
)
ON COMMIT PRESERVE DEFINITION;
INSERT INTO ora$ptt_zs_temp_table VALUES (1, ‘ONE’);
SELECT COUNT(*) FROM ora$ptt_zs_temp_table;
select * from USER_PRIVATE_TEMP_TABLES;
提交后还是可以查看临时表的数据的
COMMIT;
断开后在连接
SELECT COUNT(*) FROM ora$ptt_zs_temp_table;