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') ))
oracle创建会话级别的临时表
最新推荐文章于 2024-08-08 07:18:53 发布