Подтвердить что ты не робот

Oracle заказывает NULL LAST по умолчанию

Есть ли способ установить порядок по умолчанию, используемый Oracle, как NULL LAST (или NULL FIRST), без необходимости помещать его в каждый запрос?

4b9b3361

Ответ 1

Нет, нет способа изменить поведение по умолчанию NULLS FIRST и NULLS LAST:

NULLS LAST по умолчанию по возрастанию, а NULLS FIRST - это по умолчанию для убывающего.


Я не могу доказать, что это невозможно изменить, но я не могу найти такую ​​возможность в тех местах, которые, скорее всего, будут реализованы.

SQL Option руководство ничего не говорит.

Параметр Ни один из параметров nls в V$PARAMETER не управляет им: select * from v$parameter where name like '%nls%';

Скрытый параметр Нет скрытый параметр. Я пробовал искать что угодно например% null% или% sort%, ни один из них не отображается.

Locale Builder. Oracle позволяет создать собственную собственную сортировку. Это имеет множество опций, но ни один из них не позволяет определить, как сортируются NULL. Установка больших сортировочных и младших номеров сортировки действительно высокая или низкая измените его (я надеялся, что NULL был реализован как жестко закодированное небольшое или большое значение). Вы можете установить порядок сортировки для 0x0000, который является "NULL", но это другой тип NULL.

Ответ 2

Нет, нет возможности включить настройку по умолчанию без использования предложения 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
    

Ответ 3

В порядке возрастания значения NULL всегда будут отсортированы последним