/*
ORACLE临时表
1.对每个session来说都是可见的(可以用 desc temp_emp 来获得表结构信息),但是这个表的数据对session来说是私有的,
每个session只能看到和修改自己的数据。
2.可以定义临时表的两种数据生存时间:transaction-specific or session-specific
transaction-specific:说明临时表的数据的生存时间是transaction,
在transaction结束时就会将临时表中的在这个transaction期间产生的数据删除。
用"on commit delete rows"子句来定义。
session-specific: 说明临时表的数据的生存时间是session,
在session结束时就会将临时表中的在这个session期间产生的数据删除。
用"on commit preserve rows"子句来定义。
*/
--【不指定临时表数据的生命周期】
create global temporary table testTmp(id number(9),name varchar2 (20));
insert into testTmp values(100,'logy');
select * from testTmp;
--*结果*:在不进行commit或rollback的时候数据可查询到,否则数据被清除
--【指定临时表数据的生命周期为同一事务期间有效】
create global temporary table testTmpTra( id number(9),name varchar2(20)) on commit delete rows;
insert into testTmpTra values(100,'logy');
select * from testTmpTra;
--*结果*:在不进行commit或rollback的时候数据可查询到,否则数据被清除
--*结论*:默认创建临时表为同一事务期间有效
--【指定临时表数据的生命周期为同一session期间有效】
create global temporary table testTmpSession( id number(9),name varchar2(20)) on commit preserve rows;
insert into testTmpSession values(100,'logy');
select * from testTmpSession;
--*结果*:commit或rollback的时候数据可查询到,但打开其他session进行执行select发现无数据(重新打开一个PL/SQL Developer窗口执行查询语句)