1. 程式人生 > >oracle查詢時union或者union all遇到order by報錯情況

oracle查詢時union或者union all遇到order by報錯情況

  今日天氣多雲轉晴,應近期甲方需求的變動,需要我扛上SQL,親自上手優化一個系統中一年前開發的一個功能。

  首先:我瞭解了要優化的功能

  其次:我看了之前寫的程式碼(包括SQL)

  最後:在我明白了我要怎麼做的情況下,我的右手從滑鼠瞬間移到了左手所在的十五寸膝上型電腦的鍵盤上,我的雙手在我大腦的驅使下開始肆虐鍵盤,

兩分鐘過後,everything is OK;

好,開啟web頁面開始執行。萬萬沒想到,報錯了。點開日誌,開始看,過了兩秒鐘,我的眼神死死的鎖在了那一行報錯的日誌上,我清清楚楚的看了sqlException,

我把報錯的SQL放到pl/sql developer中,按下了F8,果然,報錯了。這時我回想我剛剛做了什麼騷操作,一秒之後,我想起來了,只是加了一個union和union後面

的一個查詢罷了,試著去掉剛剛加的SQL程式碼,哎,沒問題啊,加上,哎,又有問題了。

  後來發現,居然union前面有一個order by在作祟,很久以前遇到過這樣類似的問題,可現在卻早已忘記,真是應了那句“用進廢退”的生物進化理論,所以今天我

將它寫在這裡,給自己記個筆記,也希望能幫助到遇到類似問題的朋友;

  通常在oracle中出現 select··········   +++········ order by 這樣的語句的時候說明當前這條select 語句的結束,而且一個select語句中只允許出現一個order by語句,而且order by必須位於整個select語句的最後。也就是說你要在它後面加東西,除了select··········   +++········ order by

;這樣,加一個分號“;”(分號意味著整句SQL的結束),如果加其他的,就是違反了它的一個規則,

當我這樣寫:

select ····· from table where  ·····  order by union select········from table where  ·····

或者這樣寫

select ····· from table where  ······· order by union all selec t····· from table where  ·····

就會報錯

所以我們在寫法上面略施技巧即可決絕此類問題的出現,解決方法如下:

select ··· from(select ··· from table where ···· order byunion select ······ (select ··· from table where ·····) //union也可為union all

select ··· from(select ··· from table where ····  union  select ··· from table where ·····) order by         //union也可為union all

OK,這個小問題已解決,

  天氣轉晴了