oracle数据库中除了永久表,还有一种临时表。
临时表的定义对于所有的会话可见,但是临时表中的数据只对插入数据到这个表的会话可见。
使用CREATE GLOBAL TEMPORARY TABLE 语句创建临时表。ON COMMIT 关键字表明这是一个事物指定还是会话指定的临时表。含义如下:
DELETE ROWS —— 创建一个事务指定的临时表。第一次插入的时候用事务绑定一个会话到临时表。事务结束的时候绑定结束。每一次commit后数据库truncate掉临时表。
PRESERVE ROWS —— 创建一个会话指定的临时表。在一个会话第一次插入数据到临时表的时候绑定这个会话。在会话结束或者在这个会话中truncate表的时候会话绑定结束。会话结束的时候自动truncate临时表。
事务指定临时表示例如下:
SQL> set timing on
SQL> set serveroutput on
SQL>
SQL> create global temporary table temp_test_delete
2 (a varchar2(10),
3 b number,
4 c date
5 )
6 on commit delete rows;
Table created
Executed in 0.297 seconds
SQL> insert into temp_test_delete values('test',1,sysdate);
1 row inserted
Executed in 0.016 seconds
SQL> select * from temp_test_delete;
A B C
---------- ---------- -----------
test 1 2010-5-13 1
Executed in 0.047 seconds
SQL> commit;
Commit complete
Executed in 0.016 seconds
SQL> select * from temp_test_delete;
A B C
---------- ---------- -----------
Executed in 0.047 seconds
SQL>
会话指定的临时表示例如下:
SQL> set timing on
SQL>
SQL> create global temporary table temp_test_preserve
2 (a varchar2(10),
3 b number,
4 c date
5 )
6 on commit preserve rows;
Table created
Executed in 0.031 seconds
SQL> insert into temp_test_preserve values('test',1,sysdate);
1 row inserted
Executed in 0.015 seconds
SQL> commit;
Commit complete
Executed in 0 seconds
SQL> select * from temp_test_preserve;
A B C
---------- ---------- -----------
test 1 2010-5-13 1
Executed in 0.032 seconds
SQL> disconnect;
Not logged on
--退出会话,重新连接
SQL> conn lhp/sensky;
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
Connected as lhp
SQL> select * from temp_test_preserve;
A B C
---------- ---------- -----------
Executed in 0.031 seconds
SQL>
临时表上可以创建索引。但索引也是临时的。索引的数据与底层表的数据具有同样的会话或事务范围。
与永久表不同,临时表创建后不会自动分配段,在第一次INSERT (or CREATE TABLE AS SELECT)执行后开始分配段。
执行DDL操作(truncate除外)在一个临时表上只有在没有会话绑定在这个临时表上的时候才允许。
如果你回滚一个事物,那么插入的数据丢失,虽然表的定义是永久的。
一个事务临时表同一时间只允许一个事物。如果在一个事务内有多个自治事务,那么每一个自治事务在前一个事务提交后可以立即使用。
因为数据是临时的,所以在系统失败后,备份恢复临时表的数据是不行的。你只能通过别的方法来保留临时表数据。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/517786/viewspace-662624/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/517786/viewspace-662624/