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

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