如何将blob转换为clob或如何在oracle中使用extractValue函数进行BLOB

时间:2018-02-05 18:56:13

标签: sql oracle oracle11g plsqldeveloper

我尝试在extractValue()中使用BLOB数据类型来获取指定XPATH中的文本,但是BLOB数据类型的抛出错误,它适用于CLOB数据类型。

所以我尝试将BLOB转换为CLOB,其逻辑低于stackoverflow

    create function clobfromblob(p_blob blob) return clob is
      l_clob         clob;
      l_dest_offsset integer := 1;
      l_src_offsset  integer := 1;
      l_lang_context integer := dbms_lob.default_lang_ctx;
      l_warning      integer;

   begin

      if p_blob is null then
         return null;
      end if;

      dbms_lob.createTemporary(lob_loc => l_clob
                              ,cache   => false);

      dbms_lob.converttoclob(dest_lob     => l_clob
                            ,src_blob     => p_blob
                            ,amount       => dbms_lob.lobmaxsize
                            ,dest_offset  => l_dest_offsset
                            ,src_offset   => l_src_offsset
                            ,blob_csid    => dbms_lob.default_csid
                            ,lang_context => l_lang_context
                            ,warning      => l_warning);

      return l_clob;

   end;

使用上面的函数后,我得到的格式不可读。请帮助我们如何将blob转换为可读格式的clob或如何将extractValue()用于BLOB消息

2 个答案:

答案 0 :(得分:1)

您可以使用包OraOpenSource Utils link 它包含许多与BLOB / CLOB等一起使用的函数。

答案 1 :(得分:0)

1)错误:PLS-306:参数的数量或类型错误。  用于blob数据的Xmltype构造函数需要两个参数。 xmltype(blob,csid)

cisd - blob数据SELECT NLS_CHARSET_ID('UTF8') csid FROM DUAL;

的字符集ID

2)ORA-31011:XML解析失败。 ... LPX-00216:无效字符31(0x1F) 这意味着oracle无法解析clobfromblob生成的xml。 invalid character 31 (0x1F) 0x1f是US(单位分隔符)的asci十六进制代码。在从blob转换为clob或blob数据中的无效xml期间,此异常的原因可能是错误的编码。