在 Oracle 中执行 DBMS_OUTPUT.PUT_LINE 时出错

Error executing DBMS_OUTPUT.PUT_LINE in Oracle

我 运行 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;

在执行我的程序并等待日志响应的那一刻:

任何人都知道错误的原因以及如何更正它。

更新:

按照使用 DBMS_LOB.READ 的 MT0 响应中的建议,尝试以下操作:

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;

但是执行它会产生以下错误:

Anyone know why the error is due

l_locBFILE.

DBMS_OUTPUT.PUT_LINE( item IN VARCHAR2 )VARCHAR2 数据类型作为其参数。

您不能将 BFILE 隐式转换为 VARCHAR2,因此过程调用会引发异常,因为调用函数时使用的参数类型错误。

and how to correct it.

使用 DBMS_LOB.READ 读取文件并使用 UTL_RAW.CAST_TO_VARCHAR2 将从 LOB 获得的 RAW 值转换为字符串以便打印。