我剛剛開始使用PL/SQL。我的關注如下:本機動態SQL,創建字符串
我想動態地創建一個字符串。
我嘗試了以下操作,但它始終導致ORA-00900 & ORA-06512處於「Execute Immediate ...」行。
這裏,我們去:
Declare
l_pre_sql varchar2(4000) := 'schema.';
l_sql varchar2(4000) := 'concat(concat(:a, :b), :c)';
l_after_sql := '.procedure(a,b,c)';
begin
execute immediate l_sql using l_pre_sql, l_sql, l_after_sql;
end;
是立即執行錯誤的語法?有沒有其他的工作可能性?如您所見,我正在解決無法使用模式名稱作爲動態變量的問題。
爲了澄清我基本上要做到這一點:提前
execute immediate ':a'||'.'||':b'||'.procedure(a,b,c)' using schema, name;
謝謝!
你爲什麼不就叫'EXECUTE IMMEDIATE l_pre_sql || l_after_sql'? (concat(schema。,concat(concat(:a,:b),:c),.procedure(a,b,c))',這根本沒有任何意義。 – AndrewMcCoist
模式名稱和變量名稱不能用作綁定變量,它可能類似於eval中的eval。 – ibre5041