Sql 选择太长的blob数据会产生奇怪的结果

Sql 选择太长的blob数据会产生奇怪的结果,sql,oracle,blob,varchar2,Sql,Oracle,Blob,Varchar2,我试图在SQL developer中运行以下查询,该查询在输出中给出奇怪的结果: select utl_raw.cast_to_varchar2(dbms_lob.substr(message,100)) from XML_MESSAGE; 我的问题是,结果对某些行显示了正确的XML消息,但对其他行显示了随机值,如:x�[o]�~߯���m0��$N�K��M��~�s�_���|D�G��质量管理�7.拔���� 我不知道为什么会发生这种情况。这是因为将BLOB投射到varchar2吗?您应

我试图在SQL developer中运行以下查询,该查询在输出中给出奇怪的结果:

select utl_raw.cast_to_varchar2(dbms_lob.substr(message,100))
from XML_MESSAGE;
我的问题是,结果对某些行显示了正确的XML消息,但对其他行显示了随机值,如:
x�[o]�~߯���m0��$N�K��M��~�s�_���|D�G��质量管理�7.拔����


我不知道为什么会发生这种情况。这是因为将BLOB投射到varchar2吗?

您应该在
utl\u raw.cast\u to\u varchar2
上执行
substr
,而不是BLOB列
message
。因此,最终的查询如下所示:

select dbms_lob.substr(utl_raw.cast_to_varchar2(message),100) from XML_MESSAGE;