动态执行函数

引用:  https://www.iteye.com/blog/wjhu-1178822

调用:

declare
v_start_runtime date;
v_datefrom varchar2(15);
v_dateto varchar2(15);
v_redoflag number(1);
v_para1 varchar2(100);
v_para2 varchar2(100);
v_errcode number(10);
v_err varchar2(1000);
v_errlog varchar2(1000);
v_res number(10);
v_run_second number(16,2);
v_sql varchar2(4000);
begin
v_datefrom := '20190902000000';
v_dateto := '20190902000000';
v_redoflag := 1;
v_para1 := '0';
v_para2 := '0';

v_sql:='p_thz.fun_TEST_THROW ';
EXECUTE IMMEDIATE 'begin :0:='||v_sql||'(:1,:2,:3,:4,:5,:6,:7,:8); end;'
using out v_res,in v_datefrom, in v_dateto, in v_redoflag, in out v_para1,in out v_para2,out v_errcode,out v_err,out v_errlog; --只用using,先写返回值

commit;

end;
/

定义一个有输入参数输出参数的函数(肯定有返回值),i_para1和i_para2是输入输出参数

create package p_thz as

function fun_TEST_THROW
(
i_date_from IN VARCHAR2, -- 统计开始时间 YYYYMMDDHH24MISS
i_date_to IN VARCHAR2, -- 统计结束时间 YYYYMMDDHH24MISS
i_redo_flag IN NUMBER, -- 是否重做标记(1是重做,0是不重做)
i_para1 IN OUT VARCHAR2, -- 动态参数1
i_para2 IN OUT VARCHAR2, -- 动态参数2
o_proc_code OUT NUMBER, -- 存储过程返回的错误代码
o_proc_errm OUT VARCHAR2, -- 存储过程返回的错误信息
o_sql_err_log OUT VARCHAR2 -- 存储过程返回的错误sql语句
) RETURN NUMBER;

end p_thz;

--有into则using的参数必现只能输入参数,不能有输出参数.
--无into则using既可以输入参数又可以输出参数了,适合函数,但返回值必现写在using后面第一个.
--调用函数只能用using不能into.
--调用存储过程只需要用到using不需要into.
--调用select语句则into和using可以同时用,先写into再写using.

原文地址:https://www.cnblogs.com/jiangqingfeng/p/11504485.html