[20181112]Private Temporary Tables Oracle Database 18C.txt --//18C出现了一种新的临时表,称为私有临时表。它们是在事务或会话结束时删除的临时数据库对象。私有临时表存储在内存中,每个 --//临时表只对创建它的会话可见。 --//语法如下: CREATE PRIVATE TEMPORARY TABLE .... ON COMMIT DROP DEFINITION ; or CREATE PRIVATE TEMPORARY TABLE .... ON COMMIT PRESERVE DEFINITION; DROP DEFINITION : This creates a private temporary table that is transaction specific. All data in the table is lost, and the table is dropped at the end of transaction. PRESERVE DEFINITION : This creates a private temporary table that is session specific. All data in the table is lost, and the table is dropped at the end of the session that created the table. --//Private temporary table name 定义使用前缀按照参数private_temp_table_prefix --//简单通过例子说明: 1.环境: SQL> select banner_full from v$version; BANNER_FULL -------------------------------------------------------------------------------- Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production Version 18.3.0.0.0 SQL> set linesize 2000 SQL> show parameter private NAME TYPE VALUE ------------------------- ------- --------- private_temp_table_prefix string ORA$PTT_ --//session 1: CREATE PRIVATE TEMPORARY TABLE temp_test ( id number; create_date date ) ON COMMIT PRESERVE DEFINITION; * ERROR at line 1: ORA-00903: invalid table name --//前缀必须使用private_temp_table_prefix。 CREATE PRIVATE TEMPORARY TABLE ORA$PTT_temp_test ( id number, create_date date ) ON COMMIT DROP DEFINITION; Table created. SQL> SELECT sid, serial#, owner, table_name, duration FROM user_private_temp_tables; SID SERIAL# OWNER TABLE_NAME DURATION ---------- ---------- ------------------------------ ------------------------------ -------------------- 392 63118 SYSTEM ORA$PTT_TEMP_TEST TRANSACTION 2.继续测试: --//别的会话也可以定义相同的表名: --//session 2: SQL> SELECT sid, serial#, owner, table_name, duration FROM user_private_temp_tables; no rows selected --//别的会话看不到对方建立的私有临时表. CREATE PRIVATE TEMPORARY TABLE ORA$PTT_temp_test ( id number, c_date date ) ON COMMIT DROP DEFINITION; Table created. --//注:字段c_date与前面不同.实际上表结构完全不同也可以的. SQL> SELECT sid, serial#, owner, table_name, duration FROM user_private_temp_tables; SID SERIAL# OWNER TABLE_NAME DURATION ---------- ---------- ------------------------------ ------------------------------ -------------------- 196 7874 SYSTEM ORA$PTT_TEMP_TEST TRANSACTION --//视图user_private_temp_tables仅仅看到自己定义的. SQL> SELECT sid, serial#, owner, table_name, duration FROM dba_private_temp_tables; SID SERIAL# OWNER TABLE_NAME DURATION ---------- ---------- ------------------------------ ------------------------------ -------------------- 196 7874 SYSTEM ORA$PTT_TEMP_TEST TRANSACTION 392 63118 SYSTEM ORA$PTT_TEMP_TEST TRANSACTION --//按照定义ON COMMIT DROP DEFINITION的特点,应该是commit后删除该表。 --//session 1: SQL> insert into ORA$PTT_temp_test values (1,sysdate); 1 row created. SQL> select count(*) from ORA$PTT_temp_test; COUNT(*) ---------- 1 SQL> commit ; Commit complete. SQL> select count(*) from ORA$PTT_temp_test; select count(*) from ORA$PTT_temp_test * ERROR at line 1: ORA-00942: table or view does not exist --//可以发现提交后,表定义消失. 3.测试 ON COMMIT PRESERVE DEFINITION: --//按照定义就是提交后保持表定义,直到退出会话才消失。 --//session 1: CREATE PRIVATE TEMPORARY TABLE ORA$PTT_temp_test ( id number, create_date date ) ON COMMIT PRESERVE DEFINITION; Table created. SQL> insert into ORA$PTT_temp_test values (1,sysdate); 1 row created. SQL> commit ; Commit complete. SQL> select count(*) from ORA$PTT_temp_test; COUNT(*) ---------- 1 --//提交后,表定义还在.继续dml操作: SQL> insert into ORA$PTT_temp_test values (2,sysdate); 1 row created. SQL> commit ; Commit complete. SQL> select * from ORA$PTT_temp_test ; ID CREATE_DATE ---------- ------------------ 1 12-NOV-18 2 12-NOV-18 --//session 2: SQL> SELECT sid, serial#, owner, table_name, duration FROM dba_private_temp_tables; SID SERIAL# OWNER TABLE_NAME DURATION ---------- ---------- ------------------------------ ------------------------------ -------------------- 196 7874 SYSTEM ORA$PTT_TEMP_TEST TRANSACTION 392 63118 SYSTEM ORA$PTT_TEMP_TEST SESSION --//可以发现ON COMMIT PRESERVE DEFINITION;的表DURATION=SESSION. --// ON COMMIT DROP DEFINITION;的表DURATION=TRANSACTION. --//全部退出后,查询: SQL> SELECT sid, serial#, owner, table_name, duration FROM dba_private_temp_tables; no rows selected --//这样私有临时表全部看不见了.
[20181112]Private Temporary Tables Oracle Database 18C.txt
来源:这里教程网
时间:2026-03-03 12:13:47
作者:
编辑推荐:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- Oracle 11g 密码延迟认证与 library cache lock 等待
- 【云和恩墨】性能优化:Linux环境下合理配置大内存页(HugePage)
- 如何协助 MySQL 实现 Oracle 高级分析函数
如何协助 MySQL 实现 Oracle 高级分析函数
26-03-03 - windows 安装的oracle数据库版本 登录的时候出现报错,ORA-12560:TNS:协议配置器失败
- oracle服务器负载过高_停止RMAN备份任务
oracle服务器负载过高_停止RMAN备份任务
26-03-03 - UTL_FILE.PUT写入txt时超过32k报ORA-29285: 文件写入错误
- WITH AS and materialize hints
WITH AS and materialize hints
26-03-03 - ORACLE analyse table方式收集表统计信息导致SQL执行计划不准确而性能下降
- HanLP用户自定义词典源码分析
HanLP用户自定义词典源码分析
26-03-03 - orecle分析函数
orecle分析函数
26-03-03
