Oracle 动态调用存储过程(立即执行)输出参数问题
我在动态调用存储过程中遇到问题Oracle 动态调用存储过程(立即执行)输出参数问题,oracle,stored-procedures,plsql,execute,execute-immediate,Oracle,Stored Procedures,Plsql,Execute,Execute Immediate,我在动态调用存储过程中遇到问题 v_sql := 'begin '|| p_procname || '(''test1'','' test2 '',:v_output2); end;'; execute immediate v_sql using out v_output2 ; dbms_output.put_line(v_output2 || ' ' ); 在这里,ı可以用executeimmediate调用过程。 但我的问题是动态绑定变量。这
v_sql := 'begin '|| p_procname || '(''test1'','' test2 '',:v_output2); end;';
execute immediate v_sql
using out v_output2 ;
dbms_output.put_line(v_output2 || ' ' );
在这里,ı可以用executeimmediate调用过程。
但我的问题是动态绑定变量。这个值来自日志表,然后我解析为execute\u immediate过程
v_sql := 'begin '|| p_procname || '(''test1'','' test2'',:v_output2); end;';
v_sql1:= ||using|| 'out v_output2 ' ;
execute immediate v_sql
v_sql1;
create procedure test_proc(p_user varchar2, p_code varchar2, p_error varchar2) is
begin
p_error := p_user || p_code;
end;
它不是那样工作的。如何使动态变量绑定,因为我调用了很多过程,而这些过程有不同的输入和输出参数。
我希望你能理解我有什么问题。我怎样才能通过这个问题呢
v_sql := 'begin '|| p_procname || '(''test1'','' test2'',:v_output2); end;';
v_sql1:= ||using|| 'out v_output2 ' ;
execute immediate v_sql
v_sql1;
create procedure test_proc(p_user varchar2, p_code varchar2, p_error varchar2) is
begin
p_error := p_user || p_code;
end;
调用相同的代码
Declare
v_test_proc varchar2(50) := 'test_proc';
p_user varchar2(50) := 'test_name';
p_code varchar2(50) := 'test_code';
p_error varchar2(100);
v_sql varchar2(2000);
begin
v_sql := 'begin ' || v_test_proc || '( :1 ,:2, :3 ); end;';
execute immediate v_sql
using p_user, p_code, out p_error;
dbms_output.put_line(p_error);
end;
这里有一个简单的程序
v_sql := 'begin '|| p_procname || '(''test1'','' test2'',:v_output2); end;';
v_sql1:= ||using|| 'out v_output2 ' ;
execute immediate v_sql
v_sql1;
create procedure test_proc(p_user varchar2, p_code varchar2, p_error varchar2) is
begin
p_error := p_user || p_code;
end;
调用相同的代码
Declare
v_test_proc varchar2(50) := 'test_proc';
p_user varchar2(50) := 'test_name';
p_code varchar2(50) := 'test_code';
p_error varchar2(100);
v_sql varchar2(2000);
begin
v_sql := 'begin ' || v_test_proc || '( :1 ,:2, :3 ); end;';
execute immediate v_sql
using p_user, p_code, out p_error;
dbms_output.put_line(p_error);
end;