Oracle: expression must have same datatype as corresponding expression 报错解决

Oracle: expression must have same datatype as corresponding expression 报错解决

 博主今天也遇到这种错误,本地测试和客户生产环境相同,但是数据不同,导致本地运行正常,客户反馈报错。排查了下发现错误产生原因。现将排查方式和修改罗列,仅供以后参考。

1.背景

背景:更新视图,本地执行正确,客户反馈脚本执行报错。错误如下:
报错信息
报错:表达式必须具有与相应表达式相同的数据类型

2.问题排查及解决

考虑是脚本修改,不做过多问题排查,定位到修改部分。
在这里插入图片描述
由于博主使用了union all拼接数据,网上搜索后发现已经有解释:
UNION ALL 两个select 语句时报的两个select 时出现,union 两个select集合时
错误1 :字段名没对齐
错误2:每个字段对应的数据类型不一样

解决方法:
要union all select两个数据集,必须字段名、字段数据类型一样!

问题进一步确认。由于使用了wm_concat函数查询数据返回了clob类型,与union all 拼接的String类型不匹配导致。

问题算是确认了:Oracle中,sql语句使用wm_concat函数,可能会返回clob类型。

接下来就是修改,想要正常输出回字符串的形式加入to_char()转换类型。即:to_char(wm_concat(column))
拓展:
wm_concat()是oracle的内置方法,在10g以及以后的版本是好使的,9i是不好使的;
如我们查询到的结果是:
班级 学生姓名
1 a
1 b
1 c
1 d
sql语句:select 班级,wmsys.wm_concat(学生姓名) from 表 group by 班级;
查询到的结果是:
班级 学生姓名
1 a,b,c,d

注:文中斜线均为转载,由于网上相同内容较多,初始来源无法确认,不做引用批注。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章