Как передать значение BLOB в качестве параметра задания СУБД?

При использовании 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;
/
0
задан Jordan Cortes 27 June 2019 в 00:03
поделиться