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

PL/SQL Oracle Discussion :

[BLOB] Le IS NULL fonctionne ?


Sujet :

PL/SQL Oracle

  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 111
    Par défaut [BLOB] Le IS NULL fonctionne ?
    Bonjour,

    Question de débutant concernant les BLOB.
    Peut on utiliser tout simplement la fonction IS NULL en SQL pour savoir si un BLOB est vide ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SQL> select count(*) from matable;
     
      COUNT(*)
    ----------
           187
     
    SQL> select count(*) from matable where BLOB$CHAMP is null;
     
      COUNT(*)
    ----------
           187
    En fait elle me ramène à chaque fois que tous mes BLOB sont vides. Et ceci sur plusieurs tables.
    Cela me parait difficile à croire (mais je ne maîtrise pas la structure, j'explore un progiciel).

    Donc avant de me lancer dans l'apprentissage du DBMS_LOB pour utiliser GETLENGTH par exemple, j'aurais voulu savoir si on pouvait faire lui faire confiance.

    Merci d'avance de vos réponses.

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Avez fait un petit test ?
    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
     
    Connecté à :
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
     
    mni@DIANA> create table t_blob (
      2    id       number(3) primary key,
      3    doc      blob
      4  )
      5  /
     
    Table créée.
     
    mni@DIANA> insert into t_blob values (1, Null)
      2  /
     
    1 ligne créée.
     
    mni@DIANA> insert into t_blob values (2, Null)
      2  /
     
    1 ligne créée.
     
    mni@DIANA> insert into t_blob values (3, empty_blob())
      2  /
     
    1 ligne créée.
     
    mni@DIANA> commit
      2  /
     
    Validation effectuée.
     
    mni@DIANA> select count(*) As cpt_blob_null
      2    from t_blob
      3   Where doc Is Null
      4  /
     
    CPT_BLOB_NULL
    -------------
                2

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 111
    Par défaut
    Effectivement, j'aurais pu (du...) faire ça C'était plus simple.

    Merci beaucoup pour la réponse.

  4. #4
    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
    Par défaut
    donc pour voir si un blob est vide, on peut faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select count(*) from t where length(b)=0;
    mais peut-être qu'il y a mieux...

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 111
    Par défaut
    Merci mais je crois que vide et null ne sont pas la même chose.

    Nombre total d'enregistrements :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> select count(*) from matable;
     
      COUNT(*)
    ----------
           196
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> select count(*) from matable where BLOBchamp1 IS NULL;
     
      COUNT(*)
    ----------
           196
    tous les champs blobs n°1 sont vides

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> select count(*) from matable where BLOBchamp2 IS NULL;
     
      COUNT(*)
    ----------
           103
    93 champs blobs n°2 sont renseignés.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> select count(*) from matable where length(BLOBchamp2)=0;
     
      COUNT(*)
    ----------
             0
    Résultat différent

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> select count(*) from matable where length(BLOBchamp1)=0;
     
      COUNT(*)
    ----------
             0
    Résultat différent

    Si on adapte votre requête à l’exemple de mnitu, on obtient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    MABASE> SELECT count(*) AS cpt_blob_length0
      2  FROM t_blob
      3  WHERE length(doc)=0;
     
    CPT_BLOB_LENGTH0
    ----------------
                   1
    Bref, il y a une différence entre un blob vide (empty) et un blob null (absence de valeur).
    Vide est une valeur

  6. #6
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    C’est exactement ce qui précisait Laurent.
    Si tu veux les blobs nulles alors Is Null
    Si tu veux les blobs vides (vide c'est plutôt empty_blob) alors c’est length.

  7. #7
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 111
    Par défaut
    Au temps pour moi.
    Je n'avais pas compris que c'était une précision supplémentaire

    Merci pour vos réponses.

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

Discussions similaires

  1. HQL is null fonctionne t il ?
    Par pcouas dans le forum Hibernate
    Réponses: 4
    Dernier message: 30/12/2010, 10h58
  2. Réponses: 14
    Dernier message: 23/07/2007, 17h29
  3. Mon "NOT NULL" ne fonctionne pas ?!
    Par Armagnak dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/06/2007, 15h03
  4. Réponses: 1
    Dernier message: 22/05/2007, 12h51
  5. Problème quand le champs de type Blob est null
    Par med_anis_dk dans le forum JDBC
    Réponses: 6
    Dernier message: 12/05/2007, 01h34

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