ORA-27465: 属性 ARGUMENT_POSITION 的值 1 无效

ORA-27465: invalid value 1 for attribute ARGUMENT_POSITION

我在一个包里有这样的程序

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

但出现同样的错误。

你能帮忙吗

谢谢,

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;

我知道问题出在哪里了。

DBMS_SCHEDULER.CREATE_JOB中我们需要传递NUMBER_OF_ARGUMENTS这样DBMS_SCHEDULER.SET_JOB_ANYDATA_VALUEDBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE就不会报错。

感谢大家的支持