临时表和专用临时表

创建全局临时表
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 PTTONCOMMITDROPDEFINITIONCREATEPRIVATETEMPORARYTABLEoraptt_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;
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_39568073/article/details/115027987