IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

[8i]Chaine vide et NULL


Sujet :

Oracle

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut [8i]Chaine vide et NULL
    est il possible de dissocier les chaines vides (ex : '' ou ' ') et la valeur NULL dans Oracle à partir des versions 8 ? si oui comment ?

    je souhaiterai que cela possible car je suis tombé dans une impasse. je reprends une vieille application pour laquel je ne peux changer la structure des tables. Cette appli marche pour Sql serveur dans laquel la gestion des chaines vides est gérés. cette application doit tourner aussi sous Oracle.

    Merci d'avance pour votre réponse.

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Bonjour ,

    Il me semble qu'il y a eu une discussion sur le sujet ... mais je ne m'en souviens pas trés bien :

    Pour Oracle '' = NULL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    SQL> create table dvp ( a varchar2(10)) ;
     
    Table créée.
     
    SQL> insert into dvp values (NULL) ; 
     
    1 ligne créée.
     
    SQL> insert into dvp values ('DVP') ; 
     
    1 ligne créée.
     
    SQL> insert into dvp values ('') ; 
     
    1 ligne créée.
     
    SQL> commit ;
     
    Validation effectuée.
     
    SQL> select * from dvp ; 
     
    A
    ----------
     
    DVP
     
     
    SQL> select count (*) from dvp ; 
     
      COUNT(*)
    ----------
             3
     
    SQL> select count(*) from dvp where a is null ; 
     
      COUNT(*)
    ----------
             2
     
    SQL> select count(*) from dvp where a ='' ; 
     
      COUNT(*)
    ----------
             0
    SQL> select count (*) from dvp where a is not null ; 
     
      COUNT(*)
    ----------
             1
     
    SQL> select count (*) from dvp where a != '' ; 
     
      COUNT(*)
    ----------
             0
    Une solution à ton probléme est de ne pas insérer '' mais plutôt ' '

  3. #3
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SQL> select 'yes' from dual where '' is null;
    yes
    '' est null dans les versions 6,7,8,9,10 mais Oracle se réserve le droit de changer ça dans une prochaine release

    Citation Envoyé par Oracle® Database SQL Reference 10g Release 2 (10.2)
    Note:
    Oracle Database currently treats a character value with a length of zero as null. However, this may not continue to be true in future releases, and Oracle recommends that you do not treat empty strings the same as nulls.

  4. #4
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    j'ai essayer d'insérer le caratere ' ' mais il me le considere comme une chaine vide aussi. Peut être y a t il un truc à activé ?

  5. #5
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    j'ai oublié de preciser que c'est un champ d'un index !!!

  6. #6
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Pourtant un simple insert avec un espace entre les cotes suffit

    je continue sur l'exemple de tout à l'heure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    SQL> insert into dvp values (' ') ; 
     
    1 ligne créée.
     
    SQL> commit 
      2  ;
     
    Validation effectuée.
     
    SQL> select count (*) from dvp ; 
     
      COUNT(*)
    ----------
             4
     
    SQL> select count(*) from dvp where a is null ; 
     
      COUNT(*)
    ----------
             2

  7. #7
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Le probleme est bien làet tu le montres bien. il prend le caractere ' ' pour une valeur NULL. Ce que je ne souhaite pas. Comment peut différencier ça ???

  8. #8
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    attention , je ne parles pas de '' mais bel et bien de ' ' cad avec un espace entre les guillemets

  9. #9
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    effectivement je me suis trompé. Mais ça marche pas sur des champs indexés

  10. #10
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Pas d'accord , toujours en continuant sur le même exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    SQL> create index dvpind on dvp  ( a ) ; 
     
    Index créé.
     
    SQL> insert into dvp values (' ') ; 
     
    1 ligne créée.
     
    SQL> select count (*) from dvp ; 
     
      COUNT(*)
    ----------
             5
     
    SQL> select count(*) from dvp where a is null ; 
     
      COUNT(*)
    ----------
             2

  11. #11
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Merci pour vos réponses et cette réactivité.
    J'ai compris mon problème.
    Effectivement dans Oracle le caractere ' ' est accepté. Par contre j'effectue mes manipulations de données par l'intermédiaire d'un composant programmé qui me nettoie les caractéres ' '. Il faut donc que je modifie le code de ce composant pour résoudre mon probléme.

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Meilleur moyen de remplacer une chaine vide par null
    Par ToniConti dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 02/09/2013, 10h11
  2. DBparameter+convertir chaine vide en null
    Par tortuegenie dans le forum ASP.NET
    Réponses: 5
    Dernier message: 23/04/2008, 15h40
  3. Réponses: 2
    Dernier message: 06/02/2008, 22h14
  4. [V10/XE] chaine vides vs nulles :cry:
    Par 250rgv dans le forum Oracle
    Réponses: 5
    Dernier message: 25/08/2006, 09h32
  5. [BDD] renvoyer une chaine vide au lieu de null
    Par cmoulin dans le forum JDBC
    Réponses: 6
    Dernier message: 06/05/2004, 11h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo