存储过程中的输入参数指定了默认值,使用DBMS_SCHEDULER调用时不能直接使用默认值???
0
存储过程在创建时给输入参数指定了默认值,使用 DBMS_SCHEDULER.create_program 创建程序调用包中的存储过程,我以为可以直 接使用存储过程创建时指定的默认值,没有给参数赋值,第二天看作业日志提示参数没值,我想知道使用 DBMS_SCHEDULER.create_program不能直接使用存储过程中的默认值吗
先前一直是手动执行存储过程,现在执行一次时间太久,打算做成job每天自动执行的。所以我的存储过程是可以使用默认值成功执行的。
以下是我的存储过程:
procedure zbjs_app_exe(b_month in varchar2 default to_char(sysdate,'yyyy-mm'),e_month in varchar2 default to_char(sysdate,'yyyy-mm'))
以下是程序截图
先前一直是手动执行存储过程,现在执行一次时间太久,打算做成job每天自动执行的。所以我的存储过程是可以使用默认值成功执行的。
以下是我的存储过程:
procedure zbjs_app_exe(b_month in varchar2 default to_char(sysdate,'yyyy-mm'),e_month in varchar2 default to_char(sysdate,'yyyy-mm'))
以下是程序截图
没有找到相关结果
重要提示:提问者不能发表回复,可以通过评论与回答者沟通,沟通后可以通过编辑功能完善问题描述,以便后续其他人能够更容易理解问题.
2 个回复
Third - Follow your heart to live 2016-07-20 回答
赞同来自:
以下是我调用的的程序包的一个子程序的代码:给输入参数指定了默认值的
procedure zbjs_app_exe(b_month in varchar2 default to_char(sysdate,'yyyy-mm'),e_month in varchar2 default to_char(sysdate,'yyyy-mm')) is
begin
--指标计算前日志准备
zbjs_app_prepare;
--人次指标计算
zbjs_app_jzrc(b_month,e_month);
--签约率指标计算
zbjs_app_qyl(b_month,e_month);
zbjs_app_cl(b_month,e_month);
--区门诊人次
zbjs_app_qxmzrc(b_month,e_month);
--区门诊费用
zbjs_app_qxmzfy(b_month,e_month);
--区住院费用
zbjs_app_qxzyfy(b_month,e_month);
--处方延伸
zbjs_app_cfys(b_month,e_month);
--“1+1+1”门急诊医疗费用
zbjs_app_qymzfy(b_month,e_month);
zbjs_app_qyzyfy(b_month,e_month);
zbjs_app_qxzyrc(b_month,e_month);
--运营机制
zbjs_app_yyjz;
--需要公式计算的指标
app_gsjs;
--计算结果推送至全量指标表
zbjs_app_end;
--异常报错信息
exception
when others then
error_mess(-1,re_errn(),substr(sqlerrm, 1, 200));
end;
以下是我创建的程序: 我以为不给程序赋值,程序会自动使用在存储过程中指定的默认值,结果执行作业时提示没有指定默认值,我的疑惑是: 即使给存储过程指定了默认值,在创建程序时还是要给程序制定默认值吗
BEGIN
DBMS_SCHEDULER.create_program(
program_name => 'SYS.ZBJS',
program_action => 'QXAPP.BZJS_APP.ZBJS_APP_EXE',
program_type => 'STORED_PROCEDURE',
number_of_arguments => 2,
comments => NULL,
enabled => FALSE);
DBMS_SCHEDULER.define_program_argument(
program_name => 'SYS.ZBJS',
argument_name => 'B_MONTH',
argument_position => 1,
argument_type => 'VARCHAR2',
default_value => '',
out_argument => FALSE);
DBMS_SCHEDULER.define_program_argument(
program_name => 'SYS.ZBJS',
argument_name => 'E_MONTH',
argument_position => 2,
argument_type => 'VARCHAR2',
default_value => '',
out_argument => FALSE);
DBMS_SCHEDULER.ENABLE(name=>'SYS.ZBJS');
END;
老头子 - 专注是唯一的捷径 2016-07-17 回答
赞同来自: seng
还一种可能是你的schedule设置的时候是怎么传参的? 有没有指定参数名=>xxx,如果没指定是按照顺序来的,所以你在schedule里设置的代码也要看看