存储过程中的输入参数指定了默认值,使用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')) 

以下是程序截图
 
QQ图片20160712094045.png
已邀请:
0

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;
1

老头子 - 专注是唯一的捷径 2016-07-17 回答

默认值是当你没指定参数的时候取默认值,如果你传入的就NULL那就是NULL,NULL是空,和没参数是两码事,你要看看你程序写的有没有问题
还一种可能是你的schedule设置的时候是怎么传参的? 有没有指定参数名=>xxx,如果没指定是按照顺序来的,所以你在schedule里设置的代码也要看看

要回复问题请先登录注册