我不仅要求动态调用存储过程,而且还要求将参数动态传递给该存储过程。
参数来自ALL_ARGUMENTS
表,该表是Oracle数据字典表。这些参数将根据rpt_wrapper_name
有所不同。
例如,sp1如下所示:
sp1 (v1, v2, v3)
存储过程sp2
如下所示:
sp2 (v1, v2, v3, v4, v5)
存储过程sp3
如下所示:
sp3 (v1, v2, v3, v4, v5, v6, v7,...)
当前我正在尝试动态SQL调用,但这对我不起作用
EXECUTE IMEDIATE 'BEGIN ' || p_Rpt_wrapper_name|| '(' || p_ParamList || ') ; END;'
Using p_ParamListUsing;
where
p_ParamList := :v1,:v2,:v3
p_ParamListUsing:= v1,v2,v3
错误:
不是所有绑定的变量ORA-01008
参数列表将基于rpt_wrapper_name
我们如何实现这一目标?请帮忙
答案 0 :(得分:0)
方法1:
更改过程,以使它们采用参数表。
type r_para is record(
parameter_name varchar2(32),
parameter_vc varchar2(32000),
parameter_nb number,
parameter_dt date);
type t_para is table of r_para;
procedure p1(p_parameters t_para);
然后致电
v_para_list.append( r_para ('ref_time',null,null,sysdate);
execute immediate 'proc2(:pin_para)' using v_para_list;
方法2:
c := DBMS_SQL.OPEN_CURSOR(true);
DBMS_SQL.PARSE(c, 'BEGIN get_employee_info(:id); END;', DBMS_SQL.NATIVE);
DBMS_SQL.BIND_VARIABLE(c, ':id', 176);
n := DBMS_SQL.EXECUTE(c);