1.概念
在oracle中,臨時表分為會話級別(session)和事務(wù)級別(transaction)兩種。
會話級的臨時表在整個會話期間都存在米罚,直到會話結(jié)束真友;事務(wù)級別的臨時表數(shù)據(jù)在transaction結(jié)束后消失,即commit/rollback或結(jié)束會話時,會清除臨時表數(shù)據(jù)。
1、事務(wù)級臨時表? on commit delete rows;? ? ? 當COMMIT的時候刪除數(shù)據(jù)(默認情況)
2隙弛、會話級臨時表? on commit preserve rows;? 當COMMIT的時候保留數(shù)據(jù),當會話結(jié)束刪除數(shù)據(jù)
2.例子
2.1 會話級別臨時表
--會話級臨時表是指臨時表中的數(shù)據(jù)只在會話生命周期之中存在狞山,當用戶退出會話結(jié)束的時候全闷,Oracle自動清除臨時表中數(shù)據(jù)。
2.1.1 創(chuàng)建方式1
create global temporary table test_session_temp_tb(temp_id number,temp_name varchar2(32)) on commit preserve rows;
insert into test_session_temp_tb values(2,'czh');
select * from? test_session_temp_tb;
2.1.2 創(chuàng)建方式2
create global temporary table test_session_temp_tb2 on commit preserve rows as select * from test_session_temp_tb;
insert into test_session_temp_tb2 values(3,'czh');
--當前session會話萍启,查詢有數(shù)據(jù)
select * from? test_session_temp_tb2;
--切換或者退出session會話总珠,查詢無數(shù)據(jù)
select * from? test_session_temp_tb2;
2.2 事務(wù)級別的臨時表
2.2.1 創(chuàng)建方式1
create global temporary table? test_session_temp_tb3(temp_id number,temp_name varchar2(100))on commit delete rows;
insert into test_session_temp_tb3 values(4,'czh');
--commmit、rollback之前查一次勘纯,有數(shù)據(jù)
select * from test_session_temp_tb3;
--commmit局服、rollback之后查一次,無數(shù)據(jù)
select * from test_session_temp_tb3;
2.2.2 創(chuàng)建方式2
create global temporary table test_session_temp_tb4 as select * from test_session_temp_tb3;--(默認創(chuàng)建的就是事務(wù)級別驳遵,所以不用on commit delete rows)
2.3 oracle的臨時表創(chuàng)建完就是真實存在的淫奔,無需每次都創(chuàng)建。
--若要刪除臨時表可以:
truncate table 臨時表名;
drop table 臨時表名;