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

注:文中斜線均爲轉載,由於網上相同內容較多,初始來源無法確認,不做引用批註。

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