默认情况下,Oracle命令NULL LAST

时间:2013-09-09 12:32:22

标签: database oracle sorting

有没有办法将Oracle使用的默认顺序设置为 NULL LAST (或 NULL FIRST ),而不必放它在每个查询?

4 个答案:

答案 0 :(得分:39)

不,无法更改the default behavior of NULLS FIRST and NULLS LAST

  

NULLS LAST是升序的默认值,NULLS FIRST是   默认为降序。


我无法证明改变是不可能的,但我无法在最有可能实施的地方找到这样的功能。

SQL选项 manual没有提及任何内容。

参数 V$PARAMETER中没有任何nls参数控制它:select * from v$parameter where name like '%nls%';

隐藏参数没有hidden parameter。我试着寻找任何东西 例如%null%或%sort%,它们都不相关。

区域设置构建器 Oracle允许您create your own custom sorting。它 有很多选项,但它们都不允许你定义NULL的排序方式。设置主要排序和次要排序数字真的高或低不 改变它(我希望将NULL实现为硬编码的小值或大值)。您可以设置0x0000的排序顺序,即“NULL”,但这是一种不同类型的NULL。

答案 1 :(得分:12)

不,没有使用order by子句就无法启用默认排序,这允许您将NULL放在最后或第一位。这是一个例子:

  1. 升序排序

    SQL> with t1(col) as(
      2    select 1    from dual union all
      3    select 2    from dual union all
      4    select null from dual union all
      5    select 3    from dual
      6  )
      7  select *
      8    from t1
      9  order by col asc nulls last
      10  ;
    

    结果:

      COL
      ------
       1
       2
       3
       null
    
  2. 降序排序

      SQL> with t1(col) as(
       2    select 1    from dual union all
       3    select 2    from dual union all
       4    select null from dual union all
       5    select 3    from dual
       6  )
       7  select *
       8    from t1
       9  order by col desc nulls last
      10  ;
    

    结果:

      COL
      ----------
       3
       2
       1
       null
    

答案 2 :(得分:1)

按升序排列,NULL值总是最后排序

答案 3 :(得分:-1)

ORDER BY EMPLOYER_NAME DESC NULLS LAST

上面的内容在Oracle 11g上对我有用