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 :

Sous-requête : compter enregistrements de chaque table


Sujet :

DB2

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 334
    Points : 123
    Points
    123
    Par défaut Sous-requête : compter enregistrements de chaque table
    Bonjour,

    Je requête une base DB2 AS/400 distante avec iSeries Navigator for Windows (je suis très novice).

    Je voudrais effectuer un compte de toutes les tables commençant par ZRT localisées dans la bibliothèque MA_BIBLIO.

    Cette requête fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select * from 
    (select table_name from 
    QSYS2.SYSTABLES 
    where table_name like 'ZRT%') as sr1
    En revanche j'essaie de faire quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select count(*) from MA_BIBLIO.sr1.table_name 
    from (select table_name from QSYS2.SYSTABLES) as sr1
    Ca me renvoie une erreur.

    Auriez-vous un conseil là-dessus ?

    Accessoirement puis-je circonscrire la liste de tables à la bibliothèque MA_BIBLIO ?

    En vous remerciant,

    C. Tobini

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Fais simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT COUNT(*) FROM QSYS2.SYSTABLES 
    WHERE table_name LIKE 'ZRT%' AND TABLE_SCHEMA = 'MA_BIBLIO'
    Sauf erreur, ça devrait marcher je pense.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 334
    Points : 123
    Points
    123
    Par défaut
    Bonjour et merci de la réponse,

    TABLE_SCHEMA fonctionne parfaitement, merci.

    En revanche, cette syntaxe renvoie le nombre d'occurences du nom de table et non le nombre de lignes.

    Ex :
    ZRT01 1
    ZRT02 1

    Vu qu'il n'y a qu'une table pour un nom donné pour MA_BIBLIO.

    C. Tobini

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Heu, la requête que t'as donné Mercure renvoie le Nbr de fichiers commencant par ZRT pour ta biliothèque et ne te peux pas te ramener :
    ZRT01 1
    ZRT02 1

    Que veux-tu exactement ?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 334
    Points : 123
    Points
    123
    Par défaut
    Désolé, ma question n'était pas claire.

    Je souhaite compter le nombre de lignes de chaque table renvoyée par QSYS2.SYSTABLES.

    C. Tobini

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Le problème c'est que tu veux faire de l'indirection, c'est à dire faire un select count(*) from xxxxxxx ou xxxxxxx est une variable.
    L'indirection n'est pas permise !
    En fait tu es obligé pour ce faire de créer au préalable une fonction en dynamique pour te renvoyer les résultats attendus :

    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
    create function qgpl/comptage(wTable varchar(128), wSchema varchar(128)) RETURNS INT
    language sql
     reads sql data
     no external action
     not deterministic
    begin
       declare Nbr int;
       Declare Qry varchar(1042);
       DECLARE c1 CURSOR FOR Req1;
       Set Qry = 'select count(*) from ' concat wSchema concat '/' concat wTable;
       PREPARE Req1 FROM Qry;
       OPEN c1;
       FETCH c1 INTO Nbr;
       CLOSE c1;
    return nbr; 
    end


    Ainsi tu pourras lancer ta requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select CAST(Table_Name   AS CHAR(10)) Fichier,     
             CAST(Table_Schema AS CHAR(10)) Bibliotheque,
             Comptage(Table_Name, Table_Schema)          
    FROM qsys2/systables                              
    WHERE table_name LIKE 'ZRT%' AND TABLE_SCHEMA = 'MA_BIBLIO'
    Ainsi tu obtiendras le Nbr d'enregistrements par fichier du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Fichier  Bibliotheque     Comptage 
    ZRT01    MA_BIBLIO       1.244.908
    ZRT02    MA_BIBLIO         123.096
    ....

Discussions similaires

  1. Compter avec 2 tables sous-requête
    Par pchartier dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/11/2011, 14h44
  2. Réponses: 5
    Dernier message: 23/11/2011, 15h13
  3. Compter des enregistrements pour chaque table
    Par piflechien73 dans le forum Développement
    Réponses: 8
    Dernier message: 19/11/2011, 20h14
  4. Réponses: 13
    Dernier message: 11/02/2011, 17h38
  5. Sous-requête dans un FROM ou table temporaire
    Par dachman dans le forum Développement
    Réponses: 7
    Dernier message: 02/12/2008, 12h41

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