oracle临时表有几种

 我来答
TUBER727
2014-02-23 · TA获得超过428个赞
知道小有建树答主
回答量:351
采纳率:100%
帮助的人:113万
展开全部
Oracle 临时表:在 Oracle 中创建一张表,这个表不用于其他的什么功能,主要用于自己的软件系统一些特有功能才用的,而当你用完之后表中的数据就没用了。 Oracle 的临时表创建之后基本不占用表空间,如果你没有指定临时表(包括临时表的索引)存放的表空的时候,你插入到临时表的数据是存放在 ORACLE 系统的临时表空间中( TEMP )。
1 、临时表的创建
创建Oracle 临时表,可以有两种类型的临时表:
会话级的临时表
事务级的临时表 。
1) 会话级的临时表因为这这个临时表中的数据和你的当前会话有关系,当你当前SESSION 不退出的情况下,临时表中的数据就还存在,而当你退出当前SESSION 的时候,临时表中的数据就全部没有了,当然这个时候你如果以另外一个SESSION 登陆的时候是看不到另外一个SESSION 中插入到临时表中的数据的。即两个不同的SESSION 所插入的数据是互不相干的。当某一个SESSION 退出之后临时表中的数据就被截断(truncate table ,即数据清空)了。会话级的临时表创建方法:

Create Global Temporary Table Table_Name (Col1 Type1,Col2 Type2...) On Commit Preserve Rows ;

举例:

create global temporary table Student (
Stu_id Number(5),
Class_id Number(5),
Stu_Name Varchar2(8),
Stu_Memo varchar2(200)) on Commit Preserve Rows ;

2) 事务级临时表是指该临时表与事务相关,当进行事务提交或者事务回滚的时候,临时表中的数据将自行被截断,其他的内容和会话级的临时表的一致(包括退出SESSION 的时候,事务级的临时表也会被自动截断)。事务级临时表的创建方法:

Create Global Temporary Table Table_Name (Col1 Type1,Col2 Type2...) On Commit Delete Rows ;

举例:
create global temporary table Classes (
Class_id Number(5),
Class_Name Varchar2(8),
Class_Memo varchar2(200)) on Commit delete Rows ;

3) 两中类型临时表的区别
会话级临时表采用 on commit preserve rows ;而事务级则采用 on commit delete rows ;用法上,会话级别只有当会话结束临时表中的数据才会被截断,而且事务级临时表则不管是 commit 、 rollback 或者是会话结束,临时表中的数据都将被截断
4 )什么时候使用临时表
1 )、当某一个 SQL 语句关联的表在 2 张及以上,并且和一些小表关联。可以采用将大表进行分拆并且得到比较小的结果集合存放在临时表中
2 )、程序执行过程中可能需要存放一些临时的数据,这些数据在整个程序的会话过程中都需要用的等等。
2 .临时表的不足之处
1 )不支持 lob 对象,这也许是设计者基于运行效率的考虑,但实际应用中确实需要此功能时就无法使用临时表了。
2 )不支持主外键关系。
仁科信息
2024-07-24 广告
Oracle EBS运维是确保企业资源规划系统稳定、高效运行的关键环节。它涵盖了系统监控、性能优化、故障排查与恢复等多方面内容。通过持续的监控和数据分析,运维团队能够及时发现并解决潜在问题,保障系统的稳定性和安全性。同时,他们还需要与业务部... 点击进入详情页
本回答由仁科信息提供
匿名用户
2014-02-23
展开全部

2种:
基于会话
基于事务


SQL> -- 基于会话的临时表.
SQL> CREATE GLOBAL TEMPORARY TABLE temp_table_session (
  2      id      INT,
  3      value   VARCHAR(10)
  4  ) ON COMMIT PRESERVE ROWS;

Table created.

SQL>
SQL> -- 基于事务的临时表.
SQL> CREATE GLOBAL TEMPORARY TABLE temp_table_transaction (
  2      id      INT,
  3      value   VARCHAR(10)
  4  ) ON COMMIT DELETE ROWS;

Table created.



对于基于事务的临时表,commit以后,临时表中的数据被清空。

对于基于会话的临时表,断开连接后,临时表中的数据被清空。

SQL> INSERT INTO temp_table_session(id, value) VALUES (1, 'ONE');
1 row created.

SQL> INSERT INTO temp_table_transaction(id, value) VALUES (1, 'ONE');
1 row created.

SQL>
SQL> SELECT COUNT(1) FROM temp_table_session;
  COUNT(1)
----------
         1

SQL> SELECT COUNT(1) FROM temp_table_transaction;
  COUNT(1)
----------
         1

SQL> commit;
Commit complete.

SQL> SELECT COUNT(1) FROM temp_table_session;
  COUNT(1)
----------
         1

SQL> SELECT COUNT(1) FROM temp_table_transaction;
  COUNT(1)
----------
         0

临时表在事前先创建好
会话/存储过程中,只作INSERT/SELECT操作
避免在存储过程中,创建临时表

临时表数据,仅仅当前会话能够检索到,会话一的数据,在会话二那里,无法检索到,只能检索到表结构。

Oracle 不会在会话结束后,删除临时表。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友07553bf0
推荐于2016-06-04 · TA获得超过1986个赞
知道大有可为答主
回答量:2464
采纳率:75%
帮助的人:1871万
展开全部
ON COMMIT DELETE ROWS 和 ON COMMIT PRESERVE ROWS

Creation of Global Temporary Tables
The data in a global temporary table is private, such that data inserted by a session can only be accessed by that session. The session-specific rows in a global temporary table can be preserved for the whole session, or just for the current transaction. The ON COMMIT DELETE ROWS clause indicates that the data should be deleted at the end of the transaction.
CREATE GLOBAL TEMPORARY TABLE my_temp_table (
column1 NUMBER,
column2 NUMBER
) ON COMMIT DELETE ROWS;

In contrast, the ON COMMIT PRESERVE ROWS clause indicates that rows should be preserved until the end of the session.
CREATE GLOBAL TEMPORARY TABLE my_temp_table (
column1 NUMBER,
column2 NUMBER
) ON COMMIT PRESERVE ROWS;
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式