oracle 臨時表,可以有兩種型別的臨時表:會話級臨時表、事務級臨時表。
會話級臨時表:
因為這個臨時表中的資料和你的當前會話有關係,當你當前 session 不退出的情況下,臨時表中的資料就還存在,而當你退出當前 session 的時候,臨時表中的資料就全部沒有了,這個時候如果以另外乙個 session 登陸的時候是看不到另外乙個 session 中的插入到臨時表中的資料的。即兩個不同的 session 所插入的資料是互不相干的,當某乙個 session 退出之後臨時表中的資料就會被清空。
--建立會話級臨時表
create global temporary
table
tmp_table(
id number
) on
commit preserve rows;
事務級臨時表:
指該臨時表與事務相關,當進行事務提交或者事務回滾的時候,臨時表中的資料將自行被截斷,其他的內容和會話級的臨時表是一致的(包括退出 session 的時候,事務級的臨時表也會被自動截斷)。
--建立事務級臨時表
create global temporary
table transaction_table(id number) on
commit
delete
rows;
--進行事務提交commit 或者事務回滾rollback 時,資料會被自動截斷(清除事務操作的資料)
insert
into transaction_table(id) values(1111
);commit
;rollback;
臨時表
--語法結構:with... as..語法結構
/*with 臨時表名1 as
(select 查詢語句),
臨時表2 as
(select 查詢語句),
臨時表3 as
(select 查詢語句)
...select 查詢語句;
*/with tmp_a as
(select
max(t.sal) max_sal from emp t) --
把查詢結構當作臨時表
select b.*
from
emp b,tmp_a c
where b.sal = c.max_sal;
總結:1、兩種臨時表的異同:
相同點:
兩種表都不能永久的儲存記錄,都是用臨時表空間。
不同點:
會話級臨時表只有當會話結束時,臨時表中的資料才會被截斷;而事務級臨時表則不管是commit、rollback 或者是會話結束,臨時表中的資料都將被截斷。
2、臨時表的使用場景:
把複雜的邏輯拆分開來,用臨時表儲存中間結果,以方便後面的邏輯處理。程式執行過程中可能需要存放一些臨時的資料,這些資料在整個程式的會話過程中都需要用到等。
(16)關聯子查詢。(17)將子查詢作為臨時表。
16 關聯子查詢。所謂關聯子查詢中,指可以在內部查詢中使用外部查詢的結果,如下 所示 242 php 網路程式設計技術與例項 select items.item id,name from items where exists select from orders where orders.item ...
sql 臨時表與子查詢效率解析
update dc keyword set wordstatus 已啟用 where word 類目出價 and wordstatus select a.data time,a.campaign id,a.adgroup id,a.nick,b.word,b.wordstatus,a.isuseca...
Oracle中臨時表
最近考慮到我們的資料庫端寫儲存過程關於臨時表使用的情況,由於我們 現在還不清楚資料庫端到底是怎麼處理的,是否和sql server的處理方式相 同,是否會存在隱患等等一些問題,為了避免將來不必要的麻煩我做了深 入的研究和檢視了一些權威的資料,現在和大家共享,希望大家在處理 oracle臨時表是注意一...