Ошибка выполнения DBMS_OUTPUT.PUT_LINE в Oracle - PullRequest
0 голосов
/ 02 марта 2020

Я запускаю DBMS_OUTPUT.PUT_LINE для отправки сообщения из процедуры и пытаюсь отобразить отладочную информацию о том, что содержит переменная типа BFILE

create or replace PROCEDURE P_FILEUPLOAD_XML IS

v_dir       gzvcatg.gzvcatg_desc11%TYPE;
l_dir       VARCHAR2(35);
l_fil       VARCHAR2(30) := 'ES0000251446027471.xml'; 
l_loc       BFILE;

BEGIN

        l_loc := BFILENAME(v_dir,l_fil);

        DBMS_OUTPUT.PUT_LINE(l_loc); 

END;

В момент выполнения моей процедуры и ожидание ответа из журнала:

enter image description here

Кто-нибудь знает, почему возникла ошибка и как ее исправить.

ОБНОВЛЕНИЕ:

В соответствии с рекомендацией в ответе MT0, использующей DBMS_LOB.READ, попробуйте следующее:

create or replace PROCEDURE P_FILEUPLOAD_XML IS

    v_dir       gzvcatg.gzvcatg_desc11%TYPE;
    l_dir       VARCHAR2(35);
    l_fil       VARCHAR2(30) := 'ES0000251446027471.xml'; 
    l_loc       BFILE;

    BEGIN

            l_loc := BFILENAME(v_dir,l_fil);

            DBMS_LOB.READ(l_loc IN BFILE); 

    END;

Но при его выполнении выдается следующая ошибка:

enter image description here

1 Ответ

1 голос
/ 03 марта 2020

Кто-нибудь знает, почему возникла ошибка

l_loc является BFILE.

DBMS_OUTPUT.PUT_LINE( item IN VARCHAR2 ) занимает VARCHAR2 тип данных в качестве аргумента.

Нельзя неявно приводить BFILE к VARCHAR2, поэтому вызов процедуры вызывает исключение, поскольку это неправильный тип аргумента для вызова функции.

и способы его исправления.

Прочитайте файл, используя DBMS_LOB.READ и используйте UTL_RAW.CAST_TO_VARCHAR2 для преобразования значения RAW, полученного из Перейдите к строке, чтобы вы могли напечатать ее.

...