默认情况下,Oracle命令NULL LAST

ras*_*cio 26 database sorting oracle

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

Jon*_*ler 43

不,是没有办法改变的默认行为NULLS FIRSTNULLS LAST:

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


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

SQL选项手册未提及任何内容.

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

隐藏参数没有隐藏参数.我尝试搜索%null%或%sort%之类的内容,但它们都不相关.

Locale Builder Oracle允许您创建自己的自定义排序.它有很多选项,但它们都不允许您定义NULL的排序方式.将Major Sort和Minor Sort数设置为真正的高或低并不会改变它(我希望将NULL实现为硬编码的小值或大值).您可以设置0x0000的排序顺序,即"NULL",但这是一种不同类型的NULL.


Nic*_*nov 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  ;
    
    Run Code Online (Sandbox Code Playgroud)

    结果:

      COL
      ------
       1
       2
       3
       null
    
    Run Code Online (Sandbox Code Playgroud)
  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  ;
    
    Run Code Online (Sandbox Code Playgroud)

    结果:

      COL
      ----------
       3
       2
       1
       null
    
    Run Code Online (Sandbox Code Playgroud)