【发布时间】:2016-08-05 22:31:06
【问题描述】:
我刚刚开始使用 PL/SQL。我的担忧如下:
我想动态创建一个字符串。
我尝试了以下方法,但它总是在“立即执行...”行中导致 ORA-00900 和 ORA-06512。
我们开始吧:
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 的语法错了吗?还有其他工作机会吗?如您所见,我正在解决不能将模式名称用作动态变量的问题。
为了澄清,我基本上想这样做:
execute immediate ':a'||'.'||':b'||'.procedure(a,b,c)' using schema, name;
提前致谢!
【问题讨论】:
-
你为什么不直接打电话给
EXECUTE IMMEDIATE l_pre_sql||l_after_sql?你现在打电话的是concat(concat(schema.,concat(concat(:a,:b), :c), .procedure(a,b,c)),这完全没有意义。 -
模式名和变量名不能作为绑定变量。它会类似于 eval 内的 eval。