ORA-27465:属性ARGUMENT_POSITION

时间:2017-08-28 09:10:45

标签: oracle scheduler jobs dbms-scheduler

我在包

中有这样的程序
PROCEDURE prepBillInfoforAccrualIntr (p_date in date);

- 创建了一个程序

BEGIN
  DBMS_SCHEDULER.CREATE_PROGRAM(PROGRAM_NAME        => 'MY_PROGRAM',
                                PROGRAM_TYPE        => 'STORED_PROCEDURE',
                                PROGRAM_ACTION      => 'GENEVA_ADMIN.IPGTIBCOAPIS_LMS_GENERIC_FIXED.PREPBILLINFOFORACCRUALINTR',
                                NUMBER_OF_ARGUMENTS => 1,
                                ENABLED             => FALSE,
                                COMMENTS            => 'MY PROGRAM');
END;

- 已定义的参数

BEGIN
  DBMS_SCHEDULER.DEFINE_PROGRAM_ARGUMENT(PROGRAM_NAME      => 'MY_PROGRAM',
                                         ARGUMENT_NAME     => 'P_DATE',
                                         ARGUMENT_POSITION => 1,
                                         ARGUMENT_TYPE     => 'DATE',
                                         DEFAULT_VALUE     => '');
END;

- 已启用

BEGIN
  DBMS_SCHEDULER.ENABLE(NAME => 'MY_PROGRAM');
END;

- 创建了一份工作

BEGIN
  DBMS_SCHEDULER.CREATE_JOB(JOB_NAME   => 'MY_TEST_JOB',
                           -- PROGRAM_NAME => 'MY_PROGRAM',
                            JOB_TYPE   => 'STORED_PROCEDURE',
                            JOB_ACTION => 'GENEVA_ADMIN.IPGTIBCOAPIS_LMS_GENERIC_FIXED.PREPBILLINFOFORACCRUALINTR',
                            START_DATE => SYSDATE,
                            AUTO_DROP  => TRUE,
                            COMMENTS   => 'MY NEW JOB');
END;

- 并传递参数

BEGIN
  DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(JOB_NAME          => 'MY_TEST_JOB',
                                        ARGUMENT_POSITION => 1,
                                        ARGUMENT_VALUE    => '06-JUL-2017');
END;

它给出了以下错误。

ORA-27465: invalid value 1 for attribute ARGUMENT_POSITION

我想将静态日期作为06-JUL-2017传递。我也试过

  

dbms_scheduler.set_job_anydata_value

但得到同样的错误。

你能帮忙吗?

谢谢,

2 个答案:

答案 0 :(得分:1)

我到底出了什么问题。

DBMS_SCHEDULER.CREATE_JOB中的

我们需要传递NUMBER_OF_ARGUMENTS,以便DBMS_SCHEDULER.SET_JOB_ANYDATA_VALUEDBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE不会出错。

感谢每一位人士的支持。

答案 1 :(得分:0)

From the docs,SET_JOB_ARGUMENT_VALUE仅适用于VARCHAR2参数。如果需要设置非VARCHAR2值(在您的情况下为日期),则必须使用SET_JOB_ANYDATA_VALUE。我认为这应该有用。

BEGIN
  DBMS_SCHEDULER.SET_JOB_ANYDATA_VALUE(JOB_NAME          => 'MY_TEST_JOB',
          ARGUMENT_POSITION => 1,
          ARGUMENT_VALUE => SYS.ANYDATA.convertDate(TO_DATE('06-JUL-2017','DD-MON-YYYY')));
END;