2011-04-18 46 views
1

我在pl/sql中使用執行立即創建臨時表&也插入表中爲什麼創建表。執行立即創建表並更新表

之後,我正在更新表。但即時得到,因爲它不是在創建表THR執行即時

示例代碼錯誤表不存在---------

begin 
    execute immediate 'create table t23 as select ''1'' aa from dual'; 
    update t23 set aa ='2' where aa='1'; 
    COMMIT ; 
end; 
+4

80%的時間根本不需要臨時表 - 你可以在一個SQL中完成。另外20%的時間,您可以使用全局臨時表或PL/SQL數組。 – 2011-04-18 13:24:55

回答

9

使用靜態SQL執行更新,並且在PL/SQL運行之前進行驗證,並且發現它引用了一個當前不存在的表。您可以使用動態SQL執行更新:

begin 
    execute immediate 'create table t23 as select ''1'' aa from dual'; 
    execute immediate 'update t23 set aa =''2'' where aa=''1'''; 
    COMMIT ; 
end; 

然而,真的是不好的做法在Oracle中,以在第一時間動態創建這樣的臨時表。你爲什麼這樣做?一旦我們知道,也許我們可以提出一個更好的選擇。

+1

創建一個全局臨時表。沒有人能看到你的數據,你可以避免立即執行。 – 2011-04-18 13:20:26

+0

@Thomas:我可能會提出這樣的看法,但目前我不知道這是否是Namita真正需要的。 – 2011-04-18 13:24:03

+1

這是我的經驗,當一個pl/sql過程執行立即創建表時,它最有可能從另一個RDBMS移動代碼。但就像你我不完全確定請求是什麼。這就是爲什麼我留下評論,而不是回答。 – 2011-04-18 13:30:40