2012-11-09 48 views
0

我使用下面的DDL創建一個全局臨時表:ORACLE11全局臨時表的壽命

CREATE GLOBAL TEMPORARY TABLE MY_TEMP_TABLE 
(
    column1 NUMBER, 
    column2 NUMBER 
) ON COMMIT PRESERVE ROWS 

然後我把一些數據,並可以精細讀它。

我關閉了我的SQL客戶端會話並重新打開它,表仍然存在,但沒有數據。

我在正確的觀察中發現,全局臨時表像對於常規永久表一樣在會話之間持續存在,但是它們中的數據只存在於其填充的會話中。

謝謝

回答

2

正確。

全局臨時表永遠存在,就像任何其他數據庫對象一樣。它是在您安裝應用程序時(不是在運行時)與其他數據庫對象一樣創建的。

如果您指定ON COMMIT PRESERVE ROWS,則數據在會話的整個生存期內保持不變(並且只對插入它的會話可見)。如果指定ON COMMIT DELETE ROWS,則數據僅在事務的生命週期中保持不變(並且只對插入它的事務可見)。

+0

我不明白的部分是「它是在您安裝應用程序時(不是在運行時)創建的」 – amphibient

+0

@foampile - 全局臨時表是由在應用程序中創建所有永久表的相同安裝腳本創建的。與在運行時創建本地臨時表的其他數據庫不同,您不希望在運行時創建全局臨時表(就像在運行時不會創建新表一樣)。 –