有没有办法将Oracle使用的默认顺序设置为 NULL LAST (或 NULL FIRST ),而不必放它在每个查询?
答案 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
放在最后或第一位。这是一个例子:
升序排序
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
降序排序
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上对我有用