gpt4 book ai didi

oracle - 使用输出变量动态调用 PL/SQL 过程

转载 作者:行者123 更新时间:2023-12-02 00:57:31 36 4
gpt4 key购买 nike

我正在尝试使用动态 SQL 来执行过程并检索输出参数:

v_sql := 'BEGIN ' || p_procname || '(''' || p_input1 || ''', ''' || p_input2 || ''', v_output1); END;';
DBMS_OUTPUT.PUT_LINE(v_sql);
EXECUTE IMMEDIATE v_sql;

我声明了 v_output1 变量,但收到此错误消息:

PLS-00201: identifier 'V_ISSUE' must be declared 

如果我用 v_sql 中的 dbms_ouput 替换上面的代码,该过程就可以工作,所以在过程方面没问题,问题在于我如何尝试动态调用它。

我不知道我想做的事情是否会以这种方式进行。有没有办法通过动态 SQL 检索此过程调用的输出参数?

最佳答案

不要使用字符串连接将参数传递给动态 SQL。这根本被认为是一种不好的做法,不仅对 Oracle 来说如此。

这很糟糕,但主要的失败点是在动态 SQL 字符串中使用局部变量的名称,因为它在引入该变量的代码块之外的任何地方都不可见。

您的代码应如下所示:

declare 
v_sql varchar2(4000);
p_procname varchar2(100);
p_input1 number;
p_input2 number;
v_output1 number;
begin

v_sql := 'begin ' || p_procname || '(:p_input1, :p_input2, :v_output); end;';

execute immediate v_sql
using in p_input1, in p_input2, out v_output1;

end;

关于oracle - 使用输出变量动态调用 PL/SQL 过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16178851/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com