您的位置:首页 > 数据库 > Oracle

oracle创建会话级别的临时表

2013-08-21 18:41 253 查看
create global temporary table myTable on commit preserve rows
as select e.empno,e.ename,e.deptno from emp e;
这样写就可以.
原因: 创建临时表时,如果指定on commit preserve rows,则是会话级别临时表,也就是说会话结束后,临时表中的记录会清空.
如果不指定,则默认为on commit delete rows,这是事务级别临时表,该事务结束后记录便会清空.
执行ddl语句,如create,alter,drop语句时,oracle会首先将当前事务中包含的已经执行了的dml语句提交,然后将ddl语句当作一个新的只含一条语句的事务执行并提交.
你创建的是事务级别的临时表,语句结束后事务提交,因此记录没了.
示例:
CREATE GLOBAL TEMPORARY  TABLE ass_stat_percent ON COMMIT PRESERVE ROWS as
(select province,city ,req_time as reqTime,round(sorting_correct_count/decode(sorting_totle_count,0,1,sorting_totle_count),5) as sortingCorrectPercent
from (select g.province as province,
g.city as city,
trunc(g.req_time, 'dd') as req_time,
sum(CASE
WHEN g.sort_right = 1 then
1
ELSE
0
END) as SORTING_CORRECT_COUNT,
count(*) as SORTING_TOTLE_COUNT
from ass_req_log g
group by g.province,g.city,trunc(g.req_time, 'dd') ))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: