對union集合操作理解不足造成的巨大的災難
朋友和我說發現了oracle union操作的一個bug,他的查詢語句如下:
SQL> select sum(a1) a1,sum(a2) a2
2 from (
3 select 1 a1,0 a2 from dual
4 union
5 select 0 a2, 1 a1 from dual
6 )
7 ;
A1 A2
---------- ----------
1 1
SQL> select 1 a1,0 a2 from dual
2 union
3 select 0 a2, 1 a1 from dual
4 ;
A1 A2
---------- ----------
0 1
1 0
說結果出錯了,應該a2為0,他說別名為 a2的值其實是0,說union不是按別名來進行區別的,一開始我還沒反應過來。後面想了一下,union的意思是用來合併兩條查詢的結果並去重,在oracle關於sql的文件中是說union集合操作中的兩個查詢中的列的型別和個數要相同。例如將上面兩個查詢別名為a2的值從0改成'0'再執行union操作就會報錯:
SQL> select 1 a1,'0' a2 from dual
2 union
3 select '0' a2, 1 a1 from dual
4 ;
select 1 a1,'0' a2 from dual
union
select '0' a2, 1 a1 from dual
ORA-01790: 表示式必須具有與對應表示式相同的資料型別
而從說明了union其實是按列出現的順序進行合併的,並不是按別名.對union的意思理解不對危害很大,從上面的列來說他本來的意思是a2應該為0,但因為他的順序寫錯了結果變成了1。這種危害太大了,如果這些數字是錢本來應該為0的,結果因為查詢中列的順序寫錯了,就會造成巨大的損失。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-1339528/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle的集合操作(union、union all、intersect、minus集合函式)Oracle函式
- 查詢集合操作union與union all
- 說說你對集合的理解?常見的操作有哪些?
- EV電池的設計,為回收工作造成了災難性障礙
- 機器學習中的維度災難機器學習
- 理解full outer jion,union,union all
- VR對於應對災難的意義 不要僅把VR用於遊戲!VR遊戲
- SQL UNION 操作符 和 UNION ALL 操作符SQL
- 歸檔目錄空間不足造成的問題
- SQL UNION 和 UNION ALL 操作符SQL
- 對伸展樹的伸展操作理解
- SQL Server中的集合運算: UNION, EXCEPT和INTERSECTSQLServer
- 由SUN公司為太平洋災難中心提供災難預警系統的技術支援想到的
- java IO流 對檔案操作的程式碼集合Java
- 利用kvo對集合進行操作
- 對Java萬用字元的個人理解(以集合為例)Java字元
- Java集合的深度理解Java
- 昨日Oracle災難現場的經歷薦Oracle
- Oralce 資料庫的災難恢復(轉)資料庫
- AIX 上VMO設定不當造成的資源不足的“問題”AI
- 04 - Mongdb的集合操作
- SQL Server災難恢復SQLServer
- 理解Path對路徑進行操作的APIAPI
- 排隊與掉線,線上遊戲的「人口災難」遊戲
- 致命Bug:軟體缺陷的災難與啟示
- 對 oracle 資料庫日期格式,以及對日期操作的理解Oracle資料庫
- 理解分析java集合操作之ConcurrentModificationExceptionJavaException
- 從《鹽和獻祭》的失敗看獨立遊戲難以持續成功的巨大難題遊戲
- union all和union的區別
- union和union all的區別
- Union與Union All的區別
- 巨大的科學難題需要大資料解決方案大資料
- 難以理解的AQS(下)AQS
- 難以理解的AQS(上)AQS
- Scala 中的集合(一):集合型別與操作型別
- 我在微服務世界中看到的災難 - joaoqalves微服務
- 「生產事故」MongoDB複合索引引發的災難MongoDB索引
- oracle資料庫災難挽救應急方案之DML誤操作恢復Oracle資料庫