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_VALUE
或DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE
就不会报错。
感谢大家的支持
我在一个包里有这样的程序
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_VALUE
或DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE
就不会报错。
感谢大家的支持