SOS:关于Oracle存储过程中的临时表的用法
1、ON COMMIT DELETE ROWS 说明临时表是事务指定,每次提交后ORACLE将截断表(删除全部行)
2、ON COMMIT PRESERVE ROWS 说明临时表是会话指定,当中断会话时ORACLE将截断表。
3、临时表(无论会话级还是事务级)中的数据都是会话隔离的,不同session之间不会共享数据。
4、在存储中使用事务级临时表时,注意commit前删除掉本事务的数据,否则可能会出现数据不断增加的情况(原因尚未搞明白)。
5、 两种临时表的语法:
create global temporary table 临时表名 on commit preserve|delete rows;
用preserve时就是SESSION级的临时表,
用delete就是TRANSACTION级的临时表。我的需求是临时表仅仅在这次调用过程时有效,表也不需要保留,用preserve还是用delete。
1、ON COMMIT DELETE ROWS 说明临时表是事务指定,每次提交后ORACLE将截断表(删除全部行)
2、ON COMMIT PRESERVE ROWS 说明临时表是会话指定,当中断会话时ORACLE将截断表。
3、临时表(无论会话级还是事务级)中的数据都是会话隔离的,不同session之间不会共享数据。
4、在存储中使用事务级临时表时,注意commit前删除掉本事务的数据,否则可能会出现数据不断增加的情况(原因尚未搞明白)。
5、 两种临时表的语法:
create global temporary table 临时表名 on commit preserve|delete rows;
用preserve时就是SESSION级的临时表,
用delete就是TRANSACTION级的临时表。我的需求是临时表仅仅在这次调用过程时有效,表也不需要保留,用preserve还是用delete。
否则用delete====>个人建议,直接用preserve就可以了。
在一进入存储过程的时候 execute immedaite 'truncate table 临时表名';
然后下面随便你怎么用了,不同的session调用互不干涉,当退出session之后数据被自动清掉。
with tmp_table as
(select * from table)
-- 后面随便怎么做了
select * from tmp_table
where XXX
另外我建的临时表是否还需要赋上访问的权限。
2、临时表需要赋权。
with as 紧跟着 sql 这个没有问题,就想知道他存在周期是不是跟表一样,一直存在。
oracle的临时表就这样,机制不同没必要往一起靠。