oracle 可以创建两种临时表
1. 会话持有的临时表
CREATE GLOBAL TEMPORARY <TABLE_NAME> ( <column specification> )
ON COMMIT PRESERVE ROWS;
2. 事务持有的临时表
CREATE GLOBAL TEMPORARY <TABLE_NAME> ( <column specification> )
ON COMMIT DELETE ROWS;
临时表只是保存当前会话(session)用到的数据,数据只在事务或会话期间存在。
通过CREATE GLOBAL TEMPORARY TABLE命令创建一个临时表,对于事务类型的临时表,
数据只是在事务期间存在,对于会话类型的临时表,数据在会话期间存在,会话的数据对于当前会话私有。每个会话只能看到并修改自己的数据。DML锁不会加到 临时表的数据上。下面的语句控制行的存在性。
● ON COMMIT DELETE ROWS 表名行只是在事务期间可见
● ON COMMIT PRESERVE ROWS 表名行在整个会话期间可见
通俗的讲,就是事务持有的临时表当commit 事务结束,就自动清除数据,但对于会话持有的临时表,commit并不影响查询临时表,唯有当前会话结束,才清除临时表数据,其他会话中也查询不到当前会话临时表数据
3. Oracle sql 用with 临时表 as (子查询)建立临时表进行操作
insert into HW_RATE
(ID,
SUB_TYPE,
DISTRICT_CODE,
REGION_CODE,
SUB_AREA_CODE,
CREATE_DATE,
CREATE_USER)
with areaInfo as //这里直接with 临时表别名.子句查询结果别名,即可
(select o.district_code bu, o.region_code re
from eis_user.org_office o
where o.sub_area_code = '60487'
and o.status = 1
and o.year = extract(year from sysdate)
and o.sub_type = 2)
select sys_guid(),
2,
areaInfo.bu,
areaInfo.re,
'60487',
sysdate,
'ww00068'
from areaInfo
网友评论