Native Dynamic SQL,创建字符串

时间:2016-04-14 11:38:16

标签: sql oracle dynamic plsql

我刚刚开始使用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 ':a'||'.'||':b'||'.procedure(a,b,c)' using schema, name;

提前致谢!

1 个答案:

答案 0 :(得分:1)

在预准备语句中(在Oracle和其他语言中),您可以使用参数替换查询字符串中的常量值。但是,您无法替换列名,表名,用户(模式),过程名称等。

换句话说,替换不仅仅是用字符串表示替换值。它将参数插入到编译语句中。

因此,您需要首先使用过程名称构造字符串,然后调用它。

我认为你想要的是:

execute immediate l_pre_sql || l_after_sql || '(:a, :b, :c)' using . . .
相关问题