我在包
中有这样的程序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
但得到同样的错误。
你能帮忙吗?谢谢,
答案 0 :(得分:1)
我到底出了什么问题。
DBMS_SCHEDULER.CREATE_JOB
中的我们需要传递NUMBER_OF_ARGUMENTS
,以便DBMS_SCHEDULER.SET_JOB_ANYDATA_VALUE
或DBMS_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;