web-dev-qa-db-ja.com

デフォルトでは、Oracleの順序はNULL LASTです

Oracleが使用するdefault順序をNULL LAST(またはNULL FIRST)、各クエリに入力する必要はありませんか?

25
rascio

いいえ、変更する方法はありません NULLS FIRSTおよびNULLS LASTのデフォルトの動作

NULLS LASTは昇順のデフォルトであり、NULLS FIRSTは降順のデフォルトです。


変更が不可能であることを証明することはできませんが、実装される可能性が最も高い場所でそのような機能を見つけることはできません。

SQLオプションmanual は何も言及していません。

ParameterV$PARAMETERのnlsパラメーターはどれも制御しません:select * from v$parameter where name like '%nls%';

隠しパラメーター隠しパラメーター はありません。 %null%や%sort%のようなものを検索しようとしましたが、それらはどれも意味がありません。

Locale BuilderOracleでは、 独自のカスタムソートを作成 を使用できます。多くのオプションがありますが、NULLのソート方法を定義できるオプションはありません。メジャーソートおよびマイナーソートの数値を実際に高くまたは低く設定しても、変更されません(NULLがハードコーディングされた小さな値または大きな値として実装されることを望んでいました)。 0x0000のソート順を設定できます。これは「NULL」ですが、これは異なるタイプのNULLです。

40
Jon Heller

いいえ、order by句を使用せずにデフォルトの順序を有効にする方法はありません。これにより、NULLsを最後または最初に配置できます。以下に例を示します。

  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
    
12
Nick Krasnov

昇順では、NULL値は常に最後にソートされます

1
Tav