不一致的数据类型:预期的 CHAR 得到了 ANYDATA

时间:2021-06-09 10:12:52

标签: sql oracle

我通过与表的 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';

到底是什么问题?

1 个答案:

答案 0 :(得分:1)

您的查询 seems to work 与 CLOB 值;但如果数据实际上是 already an 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 with XMLType data;和 with CLOB data 使用该类型的构造函数或 XMLParse 转换为 XMLType。