Pau*_*aul 3 oracle plsql oracle10g
我正在尝试使用动态sql来执行过程并检索输出参数:
v_sql := 'BEGIN ' || p_procname || '(''' || p_input1 || ''', ''' || p_input2 || ''', v_output1); END;';
DBMS_OUTPUT.PUT_LINE(v_sql);
EXECUTE IMMEDIATE v_sql;
Run Code Online (Sandbox Code Playgroud)
我v_output1声明了变量,但是我收到此错误消息:
PLS-00201: identifier 'V_ISSUE' must be declared
Run Code Online (Sandbox Code Playgroud)
如果我用dbms_ouput替换上面的代码,程序就有效v_sql,所以在程序方面没问题,问题出在我试图动态调用的地方.
我不知道我想要做的事情是否会以这种方式运作.有没有办法通过动态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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24618 次 |
| 最近记录: |