ORACLE临时表总结
- 格式:docx
- 大小:14.62 KB
- 文档页数:3
在oracle数据块中,除了平常所说的永久表以外,还有一种类型的表,叫做临时表。
临时表与永久表最基本的区别是临时表中的数据只会在一定时期内临时存在,当一个
session结束时或者一个transaction结束时,相应的临时表中的数据就会被数据库自动
清除。值得注意的是,临时表是全局表,只是其中的数据被清除,表仍然存在。oracle中
的临时表它有一个显著的作用,就是它可以让用户之间互不干扰,每个用户在各自的
session或transaction中去操作自己的数据,不用担心去影响其他session或
transaction,更不用担心锁的问题。
根据临时表的性质,将oracle数据块中的临时表分为回话临时表(session)和事务
临时表(transaction),回话临时表只在当前session中有效,当结束session时,回话
临时表被清除;事务临时表中的数据在transaction结束时被清除,即执行commit或
rollback操作,或者是结束session回话,以上三种都会清除事务临时表中的数据。
session临时表与transaction临时表在创建的时候不同的地方在于on commit preserve
rows和on commit delete rows,前者为session临时表,后者为transaction临时表,
注意下就好。
(1)session临时表
1
2
3
4
5
6
7
8
-- 创建session临时表
CREATE GLOBAL TEMPORARY TABLE temp_tbs(
t_id NUMBER,
t_note VARCHAR2(20)
) ON COMMIT PRESERVE ROWS;
-- 为session临时表插入一条数据
INSERT INTO temp_tbs VALUES (1, 'note01');
-- 提交数据保存到数据块中
COMMIT;
9
10
11
-- 查找session临时表中数据
SELECT * FROM temp_tbs;
在一个session中执行上述代码,执行结果可以找到插入的那条数据。当关闭该
session,重新再打开一个session,再次执行最后一条查询语句,发现没有提示
temp_tbs表不存在的错误,说明session临时表是全局存在的,但是此时查出来的表中
并没有数据,说明数据已经随着session的结束而被数据库自动清除了。
(2)transaction临时表
1
2
3
4
5
6
7
8
9
10
11
12
13
-- 创建transaction临时表
CREATE GLOBAL TEMPORARY TABLE temp_tbt(
t_id NUMBER,
t_note VARCHAR2(20)
) ON COMMIT DELETE ROWS;
-- 为transaction临时表插入一条数据
INSERT INTO temp_tbt VALUES (1, 'note01');
-- 查找transaction临时表中数据(数据没有commit到数据库中)
SELECT * FROM temp_tbt;
-- 提交数据保存到数据库中(将数据commit到数据库中)
COMMIT;
-- commit以后,再次执行查询语句,发现没有结果集
SELECT * FROM temp_tbt;
在一个session中分别执行上述代码,当数据没有commit到数据库中时,发现查询
结果中能够找到(1, 'note01')这条记录,然后执行commit,如果是在永久表中,
commit以后数据会被保存到数据库中,那么应该会查到数据,但是在这里,当commit
以后,再次执行查询会发现没有结果集,说明transaction临时表中的数据在这里随着
transaction的结束而被数据库清除了。这里只实验了commit导致transaction结束的
一种情况,读者可自行测试rollback以及关闭session。
对于oracle中临时表的简单理解大概就是这样,之所以这次会总结oracle的临时表,
主要是因为我在开发报表的时候发现报表开发中大量使用到了临时表,这也强有力的说明
了临时表确实十分有用。