我在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;
我在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;
使用靜態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中,以在第一時間動態創建這樣的臨時表。你爲什麼這樣做?一旦我們知道,也許我們可以提出一個更好的選擇。
創建一個全局臨時表。沒有人能看到你的數據,你可以避免立即執行。 – 2011-04-18 13:20:26
@Thomas:我可能會提出這樣的看法,但目前我不知道這是否是Namita真正需要的。 – 2011-04-18 13:24:03
這是我的經驗,當一個pl/sql過程執行立即創建表時,它最有可能從另一個RDBMS移動代碼。但就像你我不完全確定請求是什麼。這就是爲什麼我留下評論,而不是回答。 – 2011-04-18 13:30:40
80%的時間根本不需要臨時表 - 你可以在一個SQL中完成。另外20%的時間,您可以使用全局臨時表或PL/SQL數組。 – 2011-04-18 13:24:55