sql - 不一致的数据类型:预期的 CHAR 得到了 ANYDATA
问题描述
我通过与表的 clob 列中的元素之一进行比较来检索表值。但是,我的查询返回以下错误:
ORA-00932: 不一致的数据类型: 预期的 CHAR 得到 ANYDATA
- 00000 - “不一致的数据类型:预期的 %s 得到了 %s”
select *
from DEMOTBL MDT
where EXTRACTVALUE(XMLPARSE(CONTENT MDT.MKT_MSG_DATA),'/MKT_MSG_DATA/sendDetail/hrg/tt/text()') = 'BIADTEST';
到底是什么问题?
解决方案
您的查询似乎适用于 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。
推荐阅读
- java - 将一个空的repo导入IntelliJ后,如何在分支下创建maven项目?
- android - 如何在手动添加到 AndroidStudio 项目的库中包含 OpenCV 依赖项
- html - 努力显示然后隐藏使用Vue的成功警报
- javascript - Angular 8等待订阅中的rest api响应
- core-data - (双)获取请求字段的总和
- caching - memcached 的设计是否不同以更好地处理更大的有效负载?是多线程使它更适合更大的值吗?
- javascript - JavaScript 特定函数提升
- awk - awk 删除具有多个重复列字段但在其他列字段中具有特定模式的行
- java - ECLIPSE 4 插件:如何访问工作台
- python - Numpy:向量矩阵,反转