首页 > 解决方案 > 不一致的数据类型:预期的 CHAR 得到了 ANYDATA

问题描述

我通过与表的 clob 列中的元素之一进行比较来检索表值。但是,我的查询返回以下错误:

ORA-00932: 不一致的数据类型: 预期的 CHAR 得到 ANYDATA

  1. 00000 - “不一致的数据类型:预期的 %s 得到了 %s”
select * 
from DEMOTBL MDT 
where EXTRACTVALUE(XMLPARSE(CONTENT MDT.MKT_MSG_DATA),'/MKT_MSG_DATA/sendDetail/hrg/tt/text()') = 'BIADTEST';

到底是什么问题?

标签: sqloracle

解决方案


您的查询似乎适用于 CLOB 值;但如果数据实际上已经是 XMLType而不是 CLOB,则会出现该错误。

如果是这种情况,那么您可以通过删除 XMLParse 调用来修复它:

select * from DEMOTBL MDT
where EXTRACTVALUE(MDT.MKT_MSG_DATA,'/MKT_MSG_DATA/sendDetail/hrg/tt/text()') = 'BIADTEST';

但是extractvalue已弃用,因此对 XMLQuery 会更好:

select * from DEMOTBL MDT
where XMLQuery('/MKT_MSG_DATA/sendDetail/hrg/tt/text()'
  passing MDT.MKT_MSG_DATA
  returning content).getstringval() = 'BIADTEST';

或 XMLExists:

select * from DEMOTBL MDT
where XMLExists('/MKT_MSG_DATA/sendDetail/hrg/tt[text()="BIADTEST"]'
  passing MDT.MKT_MSG_DATA);

db<>fiddle 处理 XMLType 数据;并使用该类型的构造函数或 XMLParse 将CLOB 数据转换为 XMLType。


推荐阅读