加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_阳江站长网 (https://www.0662zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2021-01-07 14:52:39 所属栏目:百科 来源:网络整理
导读:我正在尝试使用动态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变量,但是收到此错

我正在尝试使用动态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;

(编辑:应用网_阳江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!