oracle排序子句的特殊寫法與ORA-01785錯誤


剛剛寫的SQL語句在執行的時候報【ORA-01785: ORDER BY item must be the number of a SELECT-list expression】錯誤,於是自己百度了一下相關錯誤,發現是和Oracle排序語句的特殊寫法有關系,這里記錄一下。

先不說錯誤的問題,我們先用常規的寫法寫一句帶排序子句的SQL語句。

SELECT ID, CODE, NAME FROM STUDENT ORDER BY CODE;

這樣寫是能夠正常執行的。

然后說一下排序子句的特殊寫法。特殊的寫法就是在ORDER BY排序子句中,可以用數字(相當於下標 + 1)代替要用來排序的字段。比如說上面的SQL語句,用來排序的字段是CODE,它在前面的SELECT子句的字段中排第二位,那么就可以用數字2來代替它。

SELECT ID, CODE, NAME FROM STUDENT ORDER BY 2;

這樣查詢出來的結果和上面的語句查詢出來的結果是一樣的。

然后我們來做個試驗,把ORDER BY子句中的數字改成4試一下,這時數字4在前面的SELECT子句中是沒有對應的字段的,因為SELECT子句中只有三個字段。

SELECT ID, CODE, NAME FROM STUDENT ORDER BY 4;

不出意料的,報ORA-01785的錯誤了。

到這里我們就可以明白,這個錯誤是因為ORDER BY子句中的數字代表的字段位數超出SELECT子句中的字段個數引起的。意思就是說,當SELECT子句中的字段有5個,那么ORDER BY子句中的數字就不能大於5,范圍區間是[1,5]。

當然,也可以進行多個字段排序和升序降序排序的。

SELECT ID, CODE, NAME FROM STUDENT ORDER BY 2 DESC, 3;

看到這里,當下次遇到ORA-01785錯誤的時候,聰明的你就知道怎么解決啦。

 

 "夕陽無限好,只是近黃昏。"


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM