度量快速开发平台-专业、快速的软件定制快开平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 部件 流程 SQL
查看: 944|回复: 3
打印 上一主题 下一主题

[分享] oracle临时表用法小结

[复制链接]

348

主题

3572

帖子

9338

积分

论坛元老

Rank: 8Rank: 8

积分
9338
跳转到指定楼层
楼主
发表于 2020-5-7 22:24:17 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

在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. -- 创建session临时表
  2. CREATE GLOBAL TEMPORARY TABLE temp_tbs(
  3.        t_id NUMBER,
  4.        t_note VARCHAR2(20)
  5. ) ON COMMIT PRESERVE ROWS;
  6. -- 为session临时表插入一条数据
  7. INSERT INTO temp_tbs VALUES (1, 'note01');
  8. -- 提交数据保存到数据块中
  9. COMMIT;
  10. -- 查找session临时表中数据
  11. SELECT * FROM temp_tbs;
复制代码

在一个session中执行上述代码,执行结果可以找到插入的那条数据。当关闭该session,重新再打开一个session,再次执行最后一条查询语句,发现没有提示temp_tbs表不存在的错误,说明session临时表是全局存在的,但是此时查出来的表中并没有数据,说明数据已经随着session的结束而被数据库自动清除了。

(2)transaction临时表


  1. - 创建transaction临时表
  2. CREATE GLOBAL TEMPORARY TABLE temp_tbt(
  3.        t_id NUMBER,
  4.        t_note VARCHAR2(20)
  5. ) ON COMMIT DELETE ROWS;
  6. -- 为transaction临时表插入一条数据
  7. INSERT INTO temp_tbt VALUES (1, 'note01');
  8. -- 查找transaction临时表中数据(数据没有commit到数据库中)
  9. SELECT * FROM temp_tbt;
  10. -- 提交数据保存到数据库中(将数据commit到数据库中)
  11. COMMIT;
  12. -- commit以后,再次执行查询语句,发现没有结果集
  13. SELECT * FROM temp_tbt;
复制代码

在一个session中分别执行上述代码,当数据没有commit到数据库中时,发现查询结果中能够找到(1, 'note01')这条记录,然后执行commit,如果是在永久表中,commit以后数据会被保存到数据库中,那么应该会查到数据,但是在这里,当commit以后,再次执行查询会发现没有结果集,说明transaction临时表中的数据在这里随着transaction的结束而被数据库清除了。这里只实验了commit导致transaction结束的一种情况,读者可自行测试rollback以及关闭session。

对于oracle中临时表的简单理解大概就是这样,之所以这次会总结oracle的临时表,主要是因为我在开发报表的时候发现报表开发中大量使用到了临时表,这也强有力的说明了临时表确实十分有用。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
若現在就覺得失望無力,未來那麽遠妳該怎麽扛...
————————————————————————致自己
回复

使用道具 举报

328

主题

3738

帖子

8566

积分

作者

Rank: 7Rank: 7Rank: 7

积分
8566
QQ
地板
发表于 2020-5-8 13:42:43 | 只看该作者
回复 支持 反对

使用道具 举报

328

主题

3738

帖子

8566

积分

作者

Rank: 7Rank: 7Rank: 7

积分
8566
QQ
板凳
发表于 2020-5-8 13:41:43 | 只看该作者
回复 支持 反对

使用道具 举报

328

主题

3738

帖子

8566

积分

作者

Rank: 7Rank: 7Rank: 7

积分
8566
QQ
沙发
发表于 2020-5-8 13:41:19 | 只看该作者
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|重庆度量科技  本站关键词:快速开发平台

GMT+8, 2024-11-29 04:41 , Processed in 0.123093 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表