oracle 全局临时表
Posted
技术标签:
【中文标题】oracle 全局临时表【英文标题】:oracle global temporary tables 【发布时间】:2010-04-22 14:24:20 【问题描述】:我创建了全局临时表。当我将代码作为单个脚本执行时,它工作正常。但是当我在 TOAD 中将它作为单个脚本执行时,没有创建任何记录。只有一个空的全局临时表。
例如。
CREATE GLOBAL TEMPORARY TABLE TEMP_TRAN
(
COL1 NUMBER(9),
COL2 VARCHAR2(30),
COL3 DATE
) ON COMMIT PRESERVE ROWS
/
INSERT INTO TEMP_TRAN VALUES(1,'D',sysdate);
/
INSERT INTO TEMP_TRAN VALUES(2,'I',sysdate);
/
INSERT INTO TEMP_TRAN VALUES(3,'s',sysdate);
/
COMMIT;
当我一次运行上述代码时,它运行良好。但是当我将它作为脚本执行时,它运行良好,但临时表中没有记录。
谁能帮我解决这个问题?
【问题讨论】:
【参考方案1】:由于您明确声明 ON COMMIT PRESERVE ROWS
,因此行似乎“消失”的唯一原因是 TOAD 使用了多个会话(即您正在使用会话 A 执行脚本并使用会话 B 查询表-- 这将看到一个空表)。
我不常使用 Toad,但我知道您可以使用此工具打开多个独立会话。
如果在提交后立即将查询 SELECT * FROM TEMP_TRAN;
放在脚本末尾会发生什么?
【讨论】:
Toad 在后台会话中运行一些脚本,因此插入的行在该会话退出后“消失”。在 SQL*Plus 中尝试一下,您应该会看到预期的行。 当我把查询 SELECT * FROM TEMP_TRAN;在提交后立即在我的脚本结束时,记录显示出来。【参考方案2】:有时,您需要刷新 Toad 中的数据显示,以便它在标签页 Data 下的表格中显示更改。
【讨论】:
以上是关于oracle 全局临时表的主要内容,如果未能解决你的问题,请参考以下文章