请教:oracle 的临时表为何插入不了数据?

吉普赛的歌 2018-01-29 05:14:41
CREATE GLOBAL TEMPORARY TABLE tmp1
AS
SELECT 1 as r from dba_tables where rownum<=5;

select * from tmp1;

drop table tmp1;

如上的SQL, 最终没有任何记录。
即使我将临时表改为先 CREATE , 再 insert ... select 也是一样。
...全文
1160 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
你加一个 On Commit Preserve Rows;建会话级的临时表,提交应该是不会清空的数据
minsic78 2018-01-29
  • 打赏
  • 举报
回复
引用 6 楼 minsic78 的回复:
如果用CTAS的方式创建全局临时表,那就建成基于session的全局临时表,而不是默认的给予事务的。 建表时候加上ON COMMIT PRESERVE ROWS
因为如4#楼所说的,CTAS是个DDL操作,它的前后,都有隐式的commit操作。
minsic78 2018-01-29
  • 打赏
  • 举报
回复
如果用CTAS的方式创建全局临时表,那就建成基于session的全局临时表,而不是默认的给予事务的。 建表时候加上ON COMMIT PRESERVE ROWS
卖水果的net 2018-01-29
  • 打赏
  • 举报
回复
-- 一般都是先把表建好,再 insert 数据,你这样试一下。 CREATE GLOBAL TEMPORARY TABLE tmp1 ON COMMIT PRESERVE ROWS AS SELECT 1 as r from dba_tables where rownum<=5;
liu志坚 2018-01-29
  • 打赏
  • 举报
回复
你create的时候,因为在create语句执行之前和执行之后都会有个隐式commit,所以create之后看不到数据,因为已经提交了。
liu志坚 2018-01-29
  • 打赏
  • 举报
回复

如图
liu志坚 2018-01-29
  • 打赏
  • 举报
回复
临时表默认是事务提交就清理数据的。 你可以试着 insert 数据,先别提交,然后再在同一个会话里面查询,就可以看到数据了。
吉普赛的歌 2018-01-29
  • 打赏
  • 举报
回复
注:没有任何异常!

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧