我通过与表的 clob 列中的元素之一进行比较来检索表值。 但是,我的查询返回以下错误:
<块引用>ORA-00932:不一致的数据类型:预期的 CHAR 得到了 ANYDATA
select *
from DEMOTBL MDT
where EXTRACTVALUE(XMLPARSE(CONTENT MDT.MKT_MSG_DATA),'/MKT_MSG_DATA/sendDetail/hrg/tt/text()') = 'BIADTEST';
到底是什么问题?
答案 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。