带您深入了解Oracle临时表

Oracle临时表是一类特殊的表,Oracle临时表(Temporary table)用于保存事务或会话期间的中间结果集。下面就为您详细介绍Oracle临时表相关的知识,供您参考。

临时表中保存的数据只对当前会话可见,所有会话都看不到其他会话的数据;临时表比常规表生成的redo少得多。不过,由于临时表必须为其中包含的数据生成undo信息, 所以也会生成一定的redo。 UPDATE和DELETE会生成最多的undo; INSERT和SELECT生成的undo最少。

对于Oracle临时表,运行时当一个会话第一次在临时表中放入数据时,才会为该会话创建一个临时段。由于每个会话会得到其自己的临时段(而不是一个现有段的一个区段),每个用户可能在不同的表空间为其临时表分配空间。

Oracle临时表与其他关系数据库中的临时表类似,这样区别只是:Oracle临时表是“静态”定义的。每个数据库只创建一次临时表,而不是为数据库中的每个存储过程都创建一次。在Oracle中,临时表一定存在,它们作为对象放在数据字典中,但是在会话向临时表中放入数据之前,临时表看上去总是空。由于临时表是静态定义的,所以你能创建引用临时表的视图,还可以创建存储过程使用静态SQL来引用临时表,等等。临时表可以是基于会话的(临时表中的数据可以跨提交存在,即提交之前仍然存在,但是断开连接后再连接后再连接时数据就没有了),也可以是基于事务的(提交之后数据就消失)。下面这个例子显示了这两种不同的临时表。我使用SCOTT.EMP表作为一个模板:

  1. ops$tkyte@ORA10G> create global temporary table temp_table_session  
  2.  
  3. 2 on commit preserve rows  
  4.  
  5. 3 as  
  6.  
  7. 4 select * from scott.emp where 1=0 
  8.  
  9. 5 /  
  10.  
  11. Table created.  

ON COMMIT PRESERVE ROWS 子句使得这是一个基于会话的临时表。在我的会话断开连接之前,或者我通过一个DELETE或TRUNCATE物理地删除行之前,这些行会一直存在于这个临时表中。

  1. ops$tkyte@ORA10G> create global temporary table temp_table_transaction  
  2.  
  3. 2 on commit delete rows  
  4.  
  5. 3 as  
  6.  
  7. 4 select * from scott.emp where 1=0 
  8.  
  9. 5 /  
  10.  
  11. Table created.  

ON COMMIT DELETE ROWS 子句使得这是一个基于事务的临时表。我的会话提交时,临时表中的行就不见了。只需把分配给这个表的临时区段交回,这些行就会消失,在临时表的自动清除过程中不存在开销。

如果你曾在SQL Server和/或 Sybase中用过临时表,现在所要考虑的主要问题是:不应该执行SELECT X, Y, Z INTO #TEMP FROM SOME_TABLE来动态创建和填充一个临时表,而应该:

l 将所有全局临时表只创建一次,作为应用安装的一部分,就像是创建永久表一样。

l 在你的过程中,只需执行INSERT INTO TEMP(X, Y, Z) SELECT X, Y, Z FROM SOME_TABLE。

归根结底,这里的目标是:不要在运行时在你的存储过程中创建表。这不是Oracle 中使用临时表的正确做法。DDL是一种代价昂贵的操作:你要全力避免在运行时执行这种操作。一个应用的临时表应该在应用安装期间创建,绝对不要在运行时创建。

Oracle临时表可以有永久表的许多属性。它们可以有触发器、检查约束、索引等。但永久表的某些特性在临时表中并不支持,这包括:

l 不能有引用完整性约束。临时表不能作为外键的目标,也不能在临时表中定义外键。

l 不能有 NESTED TABLE类型的列。 在 Oracle 9i及以前版本中, VARRAY类型的列也不允许;不过Oracle 10g中去掉了这个限制。

l 不能是 IOT。

l 不能在任何类型的聚簇中。

l 不能分区。

l 不能通过ANALYZE表命令生成统计信息。

在所有数据库中,临时表的缺点之一是优化器不能正常地得到临时表的真实统计。(
 
 

 

【编辑推荐】

oracle查询用户所有表的语句

Oracle with语句的用法

常见的ORACLE数据类型介绍

Oracle并行查询方式的利用

oracle并行查询一列的实现

 

 

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/250974.html<

(0)
管理的头像管理
上一篇2025-04-28 18:26
下一篇 2025-04-28 18:27

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注