ras*_*cio 26 database sorting oracle
有没有办法将Oracle使用的默认顺序设置为NULL LAST(或NULL FIRST),而不必将其放在每个查询中?
Jon*_*ler 43
不,是没有办法改变的默认行为NULLS FIRST和NULLS 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最后或第一个.这是一个例子:
升序
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)降序排序
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)