在使用DBMS_SCHEDULER.SET_JOB_ANYDATA_VALUE和传递BLOB封装的ANYDATA值时,赋值失败并出现错误:
ORA-22370: incorrect usage of method
ORA-06512: at "SYS.DBMS_ISCHED", line 278
ORA-06512: at "SYS.DBMS_SCHEDULER", line 880
ORA-06512: at line 9
22370. 00000 - "incorrect usage of method %s"
*Cause: This method of SYS.AnyType or SYS.AnyData or SYS.AnyDataSet is
being used inappropriately.
*Action: Check the documentation for correct usage.
如果我通过一个VARCHAR2封装在ANYDATA它的工作,但一个BLOB不工作。这是一个例子:
PL/SQL 程序
CREATE OR REPLACE PROCEDURE BLOB_TEST (
p_blob BLOB
) AS
BEGIN
COMMIT;
END;
/
数据库管理系统程序
BEGIN
DBMS_SCHEDULER.CREATE_PROGRAM (
program_name => 'prog_blob_test',
program_type => 'STORED_PROCEDURE',
program_action => 'BLOB_TEST',
number_of_arguments => 1,
enabled => FALSE
);
DBMS_SCHEDULER.DEFINE_ANYDATA_ARGUMENT (
program_name => 'prog_blob_test',
argument_name => 'p_blob',
argument_position => 1,
argument_type => 'BLOB',
default_value => NULL
);
DBMS_SCHEDULER.ENABLE (name => 'prog_blob_test');
END;
/
数据库管理系统工作
DECLARE
l_blob BLOB := UTL_RAW.cast_to_raw('This is some BLOB data');
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'job_blob_test',
program_name => 'prog_blob_test'
);
DBMS_SCHEDULER.SET_JOB_ANYDATA_VALUE (
job_name => 'job_blob_test',
argument_name => 'p_blob',
argument_value => SYS.ANYDATA.ConvertBlob(l_blob) -- DON'T WORK
-- argument_value => SYS.ANYDATA.convertvarchar2('test') -- WORKS!
);
-- DBMS_SCHEDULER.ENABLE (name => 'job_blob_test');
END;
/