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