При использовании 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;
/
СУБД JOB
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;
/