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

DB2 Discussion :

Tester le Resultat d'une requête SQL sous DB2 si c'est NULL


Sujet :

DB2

  1. #1
    Membre du Club
    Homme Profil pro
    informatique
    Inscrit en
    Avril 2012
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2012
    Messages : 89
    Points : 46
    Points
    46
    Par défaut Tester le Resultat d'une requête SQL sous DB2 si c'est NULL
    Bonjour j'écris une procédure sous DB2 mais je n'arrive pas a tester si le résultat de la requête SQL est NULL.
    jai besoins d'aide. Merci d'avance.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    IF (MATRICULE > 0) THEN
    SET NUMERO = ( SELECT NUM FROM TABTEST . PERSONNE WHERE NOM = FNOM AND PRENOM = FPRENOM ) ; 
    IF NUMERO <> 0 THEN 
    SET NUMERONEW = NUMERO + 1 ;
    ELSE
    --------Quant le resultat de la requete est null----
    SET NUMERONEW = NUMERO ;
    END IF;

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Pour tester la nullité, il suffit de coder IF colname IS NULL, a tester en 1er avant de tester <> 0 donc

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Par contre, tu ne peux pas faire ce que tu as codé :

    --------Quant le resultat de la requete est null----
    SET NUMERONEW = NUMERO ;
    END IF

    La requête ayant un résultat nul, le contenu de NUMERO est nul (et donc non numérique)
    Si la variable cible NUMERONEW est déclarée en numérique, alors abend très probable selon la plate forme d'exécution (sur Z/OS c'est un 0C7 garanti)

    Tu peux donc coder ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    IF  MATRICULE > 0  THEN
        SET NUMERO = 
            (SELECT NUM 
             FROM TABTEST.PERSONNE 
             WHERE  NOM      = FNOM 
               AND  PRENOM = FPRENOM) 
        IF  NUMERO IS NULL THEN 
            SET NUMERONEW =  1 (ou zéro selon la valeur de début souhaitée)
        ELSE
            SET NUMERONEW = NUMERO + 1
        END-IF
    END-IF

  4. #4
    Membre du Club
    Homme Profil pro
    informatique
    Inscrit en
    Avril 2012
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2012
    Messages : 89
    Points : 46
    Points
    46
    Par défaut
    Bonjour,
    Vu la structure de ton code je sais que ça marche bien mais j'ai trouvé la solution en utilisant la fonction IFNULL.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    IF (MATRICULE > 0) THEN
    SET NUMERO = IFNULL(( SELECT NUM FROM TABTEST . PERSONNE WHERE NOM = FNOM AND PRENOM = FPRENOM ) , 0) ; 
    IF NUMERO <> 0 THEN 
    SET NUMERONEW = NUMERO + 1 ;
    ELSE
    --------Quant le resultat de la requete est null----
    SET NUMERONEW = NUMERO ;
    END IF;
    END IF;
    Merci!!!!

  5. #5
    Membre du Club
    Homme Profil pro
    informatique
    Inscrit en
    Avril 2012
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2012
    Messages : 89
    Points : 46
    Points
    46
    Par défaut
    Bonjour,
    Vu la structure de ton code je sais que ça marche bien mais j'ai trouvé la solution en utilisant la fonction IFNULL.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    IF (MATRICULE > 0) THEN
    SET NUMERO = IFNULL(( SELECT NUM FROM TABTEST . PERSONNE WHERE NOM = FNOM AND PRENOM = FPRENOM ) , 0) ; 
    IF NUMERO <> 0 THEN 
    SET NUMERONEW = NUMERO + 1 ;
    ELSE
    --------Quant le resultat de la requete est null----
    SET NUMERONEW = NUMERO ;
    END IF;
    END IF;
    Merci!!!!

  6. #6
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2021
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2021
    Messages : 1
    Points : 2
    Points
    2
    Par défaut SELECT DB2 - test de null
    pour tester les zones qui peuvent être nulles dans une table (voir le create table)
    exemple de create table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE TAB1
    (COL1 DECIMAL(5),
    COL2 CHAR(1),
    COL3 CHAR(5) NOT NULL,
    COL4 DATE NOT NULL WITH DEFAULT,
    COL5 TIME NOT NULL);
    en working (en cobol) :
    définir les indicateurs de null en pic s9(4) comp (exemple IND-COL1)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT COL1, COL2, COL3
    INTO COL1:IND-COL1, 
             COL2:IND-COL2, 
             COL3
    FROM TAB1
    WHERE COL3 = 'A'
    pour savoir si la zone est nulle (indicateur = -1) tester après

  7. #7
    Membre actif
    Homme Profil pro
    Architecte technique & logiciel IBM i
    Inscrit en
    Septembre 2010
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique & logiciel IBM i
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2010
    Messages : 179
    Points : 275
    Points
    275
    Par défaut
    Est-ce qu'il ne serait pas plus simple d'utiliser un COALESCE qui renverrait soit le résultat de la requête (donc un numérique), soit 0. Après, il suffit d'incrémenter et ça marche à tous les coups.

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Ingénieur d'Etude Mainframe/AS400
    Inscrit en
    Novembre 2012
    Messages
    1 767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'Etude Mainframe/AS400
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2012
    Messages : 1 767
    Points : 10 764
    Points
    10 764
    Par défaut
    Bonjour, je suis également partisan du coalesce dans ce cas de figure.

Discussions similaires

  1. [MySQL] tester le resultat d'une requête
    Par bourbita.thameur dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 04/05/2009, 11h11
  2. Resultat d'une requête SQL sous C
    Par riadh8 dans le forum Linux
    Réponses: 1
    Dernier message: 18/04/2009, 21h47
  3. Réponses: 1
    Dernier message: 07/04/2008, 11h23
  4. limitation de caractére dans une requête SQL sous Acces
    Par amka dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 18/08/2006, 15h15
  5. Réponses: 8
    Dernier message: 11/08/2006, 09h30

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