web-dev-qa-db-fra.com

Commande Oracle NULL LAST par défaut

Existe-t-il un moyen de définir l'ordre par défaut utilisé par Oracle pour NULL LAST (ou NULL FIRST ), sans avoir à le mettre dans chaque requête?

25
rascio

Non, il n'y a aucun moyen de changer le comportement par défaut de NULLS FIRST et NULLS LAST :

NULLS LAST est la valeur par défaut pour l'ordre croissant et NULLS FIRST est la valeur par défaut pour l'ordre décroissant.


Je ne peux pas prouver qu'il est impossible de changer, mais je ne trouve pas une telle fonctionnalité aux endroits où elle est le plus susceptible d'être implémentée.

Option SQL Le manuel ne mentionne rien.

Paramètre Aucun des paramètres nls dans V$PARAMETER le contrôler: select * from v$parameter where name like '%nls%';

Paramètre caché Il n'y a pas paramètre caché . J'ai essayé de rechercher quelque chose comme% null% ou% sort%, aucun d'eux ne semble pertinent.

Locale Builder Oracle vous permet de créer votre propre tri personnalisé . Il a beaucoup d'options, mais aucune d'entre elles ne vous permet de définir comment les NULL sont triés. La définition des nombres de tri majeur et de tri mineur vraiment élevé ou faible ne le change pas (j'espérais qu'un NULL a été implémenté comme une petite ou une grande valeur codée en dur). Vous pouvez définir l'ordre de tri pour 0x0000, qui est "NULL", mais c'est un type différent de NULL.

40
Jon Heller

Non, il n'y a aucun moyen d'activer la commande par défaut sans utiliser order by clause, qui vous permet de mettre NULLs en dernier ou en premier. Voici un exemple:

  1. Ordre croissant

    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  ;
    

    Résultat:

      COL
      ------
       1
       2
       3
       null
    
  2. Ordre décroissant

      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  ;
    

    Résultat:

      COL
      ----------
       3
       2
       1
       null
    
12
Nick Krasnov

Dans l'ordre croissant, les valeurs NULL seront toujours triées en dernier

1
Tav