暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

oracle 临时表简单说明

原创 不吃草的牛_Nick 2023-05-30
759

Oracle允许创建临时表来保存会话甚至事务中的数据。在会话或事务结束时,此表被删除(数据行自动被删除)。在你处理复杂的査询或事务时,由于在数据写入永久表之前需要暂时存储行信息,所以就产生了用来存储这些数据的临时表。

临时表中的数据不能像在其他永久表中的数据那样进行备份。在临时表创建过程中,不会像永久表和索引那样自动分配数据段或索引段。仅当临时表使用了第一个INSERT命令后才会在临时段中给它分配空间。

临时表提高了包含复杂査询的事务的性能。对复杂査询的传统响应方式之•是使用一个视图使发条査询更易于操作,但是,该视图在每次访问它时都需要执行,因而在许多情况下抵消了它的好处。临时表是一个优秀的解决方案,因为它是为用于特殊的会话或事务的岌杂SELECT语句而建立的,并且它在会话后自动清除数据。

注解 尽管Oracle不分析临时表的数据来收集数据的分布信息,但因为临时表始终在一个便利的位置上保持访问联结和其他信息,所以这并不会影响高效查询处理.你可以重复访问该表而不是重复执行复杂的查询.

临时表在用户的临时表空间中创建,并且只在向临时表发布了第一个INSERT语句之后才分配临时段。当完成事务或结束会话后,将根据临时表的定义撤销临时段的分配。

以下是从DBA的角度査看临时表吸引人的几个功能:
★ 临时表彻底减少了由事务产生的重做活动量。如果在复杂的事务中广泛使用临时表,那么重做日志不会很快填满。
★ 可以索引临时表以提高性能。
★ 在临时表中,会话可以像普通永久表中那样更新、插入和删除数据。
★ 在一个会话或事务后数据将自动从临时表中删除。
★ 可在临时衣上定义表的约束。
★ 不同的用户可以访问相同的临时表,毎个用户只看到自己的会话数据。
★ 临时表提供了高效的数据访问,因为不需姿重复执行复杂的査询。
★ 临时表的锁定覺很小,这意味宕更高效的査询处理.
★ 临时表的结构在数据删除后仍然存在,以方便今后的使用。

1.创建会话临时表
以下是一个在整个会话中都存在的临时表的例子。使用 ON COMMIT PRESERVE ROWS 选项来保证在临时表中仅保留会活过程数据
CREATE GLOBAL TEMPORARY TABLE flight_status(
destination VARCHAR2(30),
staitdate DATE,
returndate DATE,
ticket_price NUMBER
) ON COMMIT PRESERVE ROWS;

上例中的ON COMMT PRESERVE ROWS 选项说明表的数据是保存整个会话,而非整个事务。

2.创建事务临时表
与会话临时表不同,事务临时表是专门针对一个事务的。只要事务被提交或回滚,数据将从临时表中删除。以下是如何创建事务临时表的例子:
CREATE GLOBAL TEMPORARY TABLE sales_info(
customername VARCHAR2(3O),
transaction_no NUMBER,
transaction_date DATE
) ON COMMIT DELETE ROWS;

ON COMMT DELETE ROWS选项说明该临时表中的数据只保存使用该表的事务。


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论