2016-03-28 76 views
1

我正在閱讀expert-oracle-database-architecture book。在這個湯姆解釋關於綁定變量。爲什麼在這裏使用immediate immediate?

你能告訴我第一個程序和第二個程序有什麼不同嗎? 根據我的理解,我們使用execute immediate來執行動態SQL語句或匿名PL/SQL塊。

這裏是目標表:

create table t (x int); 

下面是示例程序#1:

ops$tkyte%ORA11GR2> create or replace procedure proc_name1 
2 as 
3 begin 
4 for i in 1 .. 10 
5  loop 
6  execute immediate 
7   'insert into t values ('||i||')'; 
8 end loop; 
9 end; 
10/

下面是示例程序#2:

create or replace procedure proc_name2 
as 
begin 
    for i in 1 .. 10 
    loop 
    insert into t values (i); 
    end loop; 
end; 
+1

這是一個不要做的例子 – Sathya

+0

所以除了他們寫的方式之外,沒有什麼區別。使用立即執行會有什麼好的表現嗎? – Wolfgang

+1

它是(ab)使用'execute immediate'語句。另外,嚴格來說,根本就不需要一個簡單插入的過程,你可以簡單地用純SQL來完成。 –

回答

5

「會有使用立即執行是否有很好的性能?「

EXECUTE IMMEDIATE是什麼不能做。它的性能會更差,因爲它完成了非動態示例的所有工作,而且還有爲循環的每次迭代硬解析語句的開銷。

湯姆指出,缺乏經驗的開發人員在不需要時經常使用EXECUTE IMMEDIATE(或其他形式的動態SQL)。動態SQL是個壞消息。除了對性能的影響:

  • 這是很難比靜態SQL編寫
  • 語法錯誤是運行時異常不編譯錯誤
  • 這是很難維持的(因爲依賴不出現影響分析是棘手數據字典視圖)。
相關問題