zoukankan      html  css  js  c++  java
  • 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错误的时候,聪明的你就知道怎么解决啦。

     "夕阳无限好,只是近黄昏。"

  • 相关阅读:
    缓存概念用法理解
    shiro
    Java生成验证码并进行验证(转)
    Java 8 Optional类深度解析(转)
    jdk8 stream可以与list,map等数据结构互相转换
    Java8初体验(二)Stream语法详解(转)
    Java 8 Optional 类
    cors跨域深刻理解
    httpclient连接池
    [C++] [算法] KMP算法
  • 原文地址:https://www.cnblogs.com/yanggb/p/10813438.html
Copyright © 2011-2022 走看看