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 régulier
    Inscrit en
    Juillet 2007
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 111
    Points : 86
    Points
    86
    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 éminent sénior 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
    Points : 11 252
    Points
    11 252
    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 régulier
    Inscrit en
    Juillet 2007
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 111
    Points : 86
    Points
    86
    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
    Points : 4 926
    Points
    4 926
    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 régulier
    Inscrit en
    Juillet 2007
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 111
    Points : 86
    Points
    86
    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 éminent sénior 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
    Points : 11 252
    Points
    11 252
    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 régulier
    Inscrit en
    Juillet 2007
    Messages
    111
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 111
    Points : 86
    Points
    86
    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