Oracle Temporary Table

 

-- 此處查詢爲空 驗證 會話斷開以後數據已經被截斷,但表定義依然存在
select * from T;
DROP TABLE T;
-- 從新建立 會話臨時表
create  GLOBAL TEMPORARY  table T
(
  C1 DATE,
  C2 TIMESTAMP(9)
)  
-- 提交時保留數據 即 在會話退出後執行 Truncate table 
ON COMMIT PRESERVE ROWS;
--  定義了創建事務級臨時表   即 在 COMMITE 或者 RollBack 時 執行 Truncate table
-- ON COMMIT DELETE ROWS
insert into t(c1,c2) values(date'2010-2-12',timestamp'2010-2-12 13:24:52.234123211');
insert into t(c1,c2) values(to_date('2010-2-12 10:20:30','YYYY-MM-DD HH24:MI:SS'),
       to_timestamp('2010-2-12 13:24:52.123456','YYYY-MM-DD HH24:MI:SS.FF6'));
       
select c1,dump(c1) c1_d,c2,dump(c2) c2_d from t;
COMMIT;
-- 驗證 提交後數據依舊被保留了
select * from T;

 

ORACLE臨時表和SQLSERVER臨時表異同

SQL SERVER臨時表
也能夠建立臨時表。臨時表與永久表類似,但臨時表存儲在 tempdb 中,當再也不使用時會自動刪除。
有本地和全局兩種類型的臨時表,兩者在名稱、可見性和可用性上均不相同。本地臨時表的名稱以單個數字符號 (#) 打頭;它們僅對當前的用戶鏈接是可見的;當用戶從 Microsoft? SQL Server? 2000 實例斷開鏈接時被刪除。全局臨時表的名稱以數學符號 (##) 打頭,建立後對任何用戶都是可見的,當全部引用該表的用戶從 SQL Server 斷開鏈接時被刪除。
例如,若是建立名爲 employees 的表,則任何人只要在數據庫中有使用該表的安全權限就可使用該表,除非它已刪除。若是建立名爲 #employees 的本地臨時表,只有您能對該表執行操做且在斷開鏈接時該表刪除。若是建立名爲 ##employees 的全局臨時表,數據表中的任何用戶都可對該表執行操做。若是該表在您建立後沒有其餘用戶使用,則當您斷開鏈接時該表刪除。若是該表在您建立後有其餘用戶使用,則 SQL Server在全部用戶斷開鏈接後刪除該表
不一樣:
1.        SQL SERVER臨時表是一種」內存表」,表是存儲在內存中的.ORACLE臨時表除非執行DROP TABLE,不然表定義會保留在數據字典中.
2.        SQL SERVER臨時表不存在相似ORACLE臨時表 事務級別 上的功能.
3        SQL SERVER本地臨時表(#) 與 ORACLE的會話級別臨時表相似,可是在會話退出的時候,ORACLE不會刪除表.
4        SQL SERVER的全局臨時表(##) 是指多個鏈接共享同一片內存.當沒有指針引用該內存區域時,SQL SERVER自動釋放全局臨時表.
5        因爲ORACLE不是一種 內存中的數據庫. 因此若是ORACLE相似SQL SERVER 頻繁的對臨時表進行創建和刪除,一定會影響性能.因此ORACLE會保留臨時表的定義直到用戶DROP TABLE.
6        在ORACLE中,若是須要多個用戶共享一個表(相似SQL SERVER的全局臨時表##).則能夠利用永久表,而且在表中添加一些能夠惟一標識用戶的列.利用觸發器和視圖.當用戶退出的時候,根據該登錄用戶的惟一信息刪除相應的表中的數據. 這種方法給ORACLE帶來了必定量的負載.
web

Mark http://blog.163.com/fox_tran/blog/static/20918020820127310918182/sql

相關文章
相關標籤/搜索