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

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