【发布时间】:2019-11-08 23:05:57
【问题描述】:
使用DBMS_SCHEDULER.SET_JOB_ANYDATA_VALUE 并传递封装在ANYDATA 值中的BLOB 时,分配失败并出现错误:
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.
如果我通过封装在ANYDATA 中的VARCHAR2 它可以工作,但BLOB 不工作。这是一个例子:
PL/SQL 过程
CREATE OR REPLACE PROCEDURE BLOB_TEST (
p_blob BLOB
) AS
BEGIN
COMMIT;
END;
/
DBMS 程序
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;
/
DBMS 作业
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;
/
【问题讨论】:
-
老问题,但你有想过这个问题吗?
标签: oracle plsql dbms-scheduler