DB2 ORACLE 臨時表創建

DB2——臨時表

 

一、臨時表

    臨時表(TEMPORARY TABLE)通常應用在需要定義臨時集合的場合。但是,在大部分需要臨時集合的時候,我們根本就不需要定義臨時表。當我們在一條SQL語句中只使用一次臨時集合時,我們可以使用嵌套表表達式來定義臨時集合;當我們在一條SQL語句中需要多次使用同一臨時集合時,我們可以使用公共表表達式;只有當我們在一個工作單元中的多條SQL語句中使用同一臨時集合時,我們才需要定義臨時表。

 

方法1:  
    DECLARE GLOBAL TEMPORARY TABLE SESSION.EMP  
    (  
        NAME VARCHAR(10),---姓名  
        DEPT SMALLINT,---部門  
        SALARY DEC(7,2)---工資  
    )  
    ON COMMIT DELETE ROWS;  
       
    方法2:  
    DECLARE GLOBAL TEMPORARY TABLE session.emp  
    LIKE staff INCLUDING COLUMN DEFAULTS  
    WITH REPLACE  
    ON COMMIT PRESERVE ROWS;  
       
    方法3:  
    DECLARE GLOBAL TEMPORARY TABLE session.emp AS  
    (  
        SELECT * FROM staff WHERE <condition>  
    )  
    DEFINITION ONLY  
    WITH REPLACE;

方法4:

DECLARE GLOBAL TEMPORARY TABLE session.emp    (  
        NAME VARCHAR(10),---姓名  
        DEPT SMALLINT,---部門  
        SALARY DEC(7,2)---工資  
    )  
   ON COMMIT PRESERVE ROWS NOT LOGGED WITH REPLACE;  

二、全局聲明式臨時表

ON COMMIT PRESERVE ROWS定義聲明式全局臨時表 定義聲明式全局臨時表的每個會話擁有自己的獨特的臨時表描述。當會話終止時,錶行和臨時表描述均會被刪除。 有如下選項,可控制commit後臨時表的狀態: 
ON COMMIT DELETE ROWS:在執行 COMMIT 操作時,如果表上沒有打開 WITH HOLD 遊標,就刪除表中的所有行。這是默認設置。 
ON COMMIT PRESERVE ROWS:在執行 COMMIT語句指定所創建的臨時表是會話級臨時表,當我們斷開連接或手動執行DELETE或TRUNCATE之前,臨時表中的數據一直存在,並且只有當前會話可以看到,其他會話看不到。
ON ROLLBACK DELETE ROWS:在執行 ROLLBACK(或 ROLLBACK to SAVEPOINT)操作時,語句指定所創建的臨時表是事務級臨時表,當COMMIT或ROLLBACK之前,這些數據一直存在,當事務提交之後,表中數據自動清除。這是默認設置。
ON ROLLBACK PRESERVE ROWS:在執行 ROLLBACK(或 ROLLBACK to SAVEPOINT)操作時,保留表中的所有行。
delete rows用於事務相關,也就在事務結束後truncate data in the temporary table
with replace 指在程序結束後自動刪除該臨時表
as 指字段從另外一個表來的意思
definition only 指創建表的時候不同時進行數據插入。關鍵字就是指“只定義無數據"只創建表
1.在建表語句中使用NOT LOGGED INITIALLY,只是在建表事務中不記日記,並不能關閉這張表的日誌。2.如果需要不記錄事務日誌,需要在每個事務的開頭使用 db2 alter table  dbname activate NOT LOGGED INITIALLY 然後做commit.這裏的不記日誌操作,僅僅在同一個事務內有效,也就是說,這個事務結束(發出了commit命令)之後,後續操作會重新記錄日誌3.可以使用NOT LOGGED INITIALLY 做清空表的操作。  用法:      alter  table nolog_tab activate not logged initially with empty table       commit
preserve rows表示在會話結束後清除臨時表的數據
前者在事務提交後數據就已經清除了.
後者在會話中止時或者導常退出時數據都會被清除掉

 

ORACLE——臨時表

CREATE GLOBAL TEMPORARY TABLE session.emp   (  
        NAME VARCHAR(10),---姓名  
        DEPT SMALLINT,---部門  
        SALARY DEC(7,2)---工資  
    )  
   ON COMMIT PRESERVE ROWS;  

創建索引:

DB2:

 CREATE INDEX  idxName  ON  tabName  (cols) COLLECT STATISTICS

ORACLE:

CREATE INDEX idxName  ON   tabName  (cols)

 

 定義了臨時表後,我們可以像使用普通表一樣使用臨時表。臨時表只對定義它的用戶有效,不同用戶可以在同一時間定義同名的臨時表,他們之間互不影響。臨時表的生命週期是SESSION,當SESSION關閉時,臨時表將自動刪除,這也是臨時表的模式名只能爲SESSION的原因。此外,我們還可以給臨時表定義索引。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章