在oracle數(shù)據(jù)庫中臨時表有兩種類型(不同于SQL Server中的本地和全局臨時表):
一、會話級臨時表:與當(dāng)前會話有關(guān)系,當(dāng)當(dāng)前會話還沒有結(jié)束的時候臨時表中的數(shù)據(jù)一直存在,一旦結(jié)束,臨時表中的數(shù)據(jù)將被清空。(注意:這里不同于SQL server數(shù)據(jù)庫中的臨時表會話結(jié)束刪除臨時表)但是臨時表依然存在于數(shù)據(jù)庫的數(shù)據(jù)字典中。
創(chuàng)建會話級臨時表的語法:
create global temporary table temptable(
id int,
name varchar2(12),
age varchar2(2),
class varchar2(12),
address varchar2(20)
)on commit preserve rows
當(dāng)創(chuàng)建后,如果執(zhí)行Commit命令數(shù)據(jù)被提交,臨時表中的數(shù)據(jù)是不會清空的(與事務(wù)級不同),而此時再執(zhí)行Rollback 命令的話,臨時表中的數(shù)據(jù)依然不會清空,但是在Commit命令之后如果在插入臨時表數(shù)據(jù)的話,執(zhí)行了Rollback命令就會使臨時表數(shù)據(jù)還原到執(zhí)行Commit之后的數(shù)據(jù)。
二、事務(wù)級臨時表:也與當(dāng)前會話有關(guān)系,會話一旦結(jié)束,數(shù)據(jù)就被清空,(依然存在臨時表并不刪除)。
創(chuàng)建事務(wù)級臨時表的語法:
create global temporary table temptable2(
id int,
name varchar2(12),
age varchar2(2),
class varchar2(12),
address varchar2(20)
)on commit delete rows
當(dāng)創(chuàng)建后,插入數(shù)據(jù),執(zhí)行commit命令臨時表將被清空,所以Rollback自然也會清空。
?
附:臨時表與普通表的區(qū)別:臨時表是存放臨時數(shù)據(jù)的,這個表默認(rèn)的是放在臨時表空間種的(Pl/SQL Developer的temp表空間下無法看到臨時表的,但確實存在于臨時表空間),而普通表也是不允許建在temp表空間下的。
?
我們可以通過view中的user_tables來查看數(shù)據(jù)庫中的普通表和臨時表
select *? from user_tables 這樣就可以查看數(shù)據(jù)庫當(dāng)前用戶能看到的所有表(包含臨時表)
?
同樣我們可以根據(jù)字段temporary 來判斷表是否是臨時表
select table_name,temporary? from user_tables where Table_name='TEMPTABLE'
查詢結(jié)果為:
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
