首发原文:http://www.laozizhu.com/view.jsp?articleId=120
临时表可以是基于会话的(临时表中的数据可以跨提交存在,即提交之前仍然存在,但是断开连接后再连接后再连接时数据就没有了),也可以是基于事务的(提交之后数据就消失)。下面这个例子显示了这两种不同的临时表。我使用SCOTT.EMP 表作为一个模板:
SQL> create global temporary table temp_table_session
2 on commit preserve rows
3 as
4 select * from scott.emp where 1=0
5 /
表已创建。
SQL> create global temporary table temp_table_transaction
2 on commit delete rows
3 as
4 select * from scott.emp where 1=0
5 /
表已创建。
SQL> insert into temp_table_session select * from scott.emp;
已创建14行。
SQL> insert into temp_table_transaction select * from scott.emp;
已创建14行。
SQL> select session_cnt, transaction_cnt
2 from ( select count(*) session_cnt from temp_table_session ),
3 ( select count(*) transaction_cnt from temp_table_transaction );
SESSION_CNT TRANSACTION_CNT
----------- ---------------
14 14
SQL> commit;
提交完成。
SQL> select session_cnt, transaction_cnt
2 from ( select count(*) session_cnt from temp_table_session ),
3 ( select count(*) transaction_cnt from temp_table_transaction );
SESSION_CNT TRANSACTION_CNT
----------- ---------------
14 0
SQL> disconnect
从 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options 断开
SQL> connect scott
输入口令:
已连接。
SQL> select session_cnt, transaction_cnt
2 from ( select count(*) session_cnt from temp_table_session ),
3 ( select count(*) transaction_cnt from temp_table_transaction );
SESSION_CNT TRANSACTION_CNT
----------- ---------------
0 0
SQL>
在commit之后,基于事务的表格里面已经没有了数据,而基于连接的数据依然存在
在断开链接后,2个临时表都没有数据了。
本文通过创建两种类型的临时表——基于会话的临时表和基于事务的临时表,并进行插入操作及提交事务,展示了这两种临时表的不同行为特性。基于会话的临时表在提交后数据仍保留,但在断开连接后数据消失;基于事务的临时表则在提交后数据立即消失。
2787

被折叠的 条评论
为什么被折叠?



