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 :

[DB2/400] Lister les tables d'un schéma


Sujet :

DB2

  1. #1
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut [DB2/400] Lister les tables d'un schéma
    Bonjour à tous !

    Je souhaiterais afficher la liste des tables d'un schéma particulier. Pour le moment j'ai la requête pour afficher l'ensemble des tables du système :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT * 
    FROM QSYS2.SYSTABLES
    WHERE TABLE_TYPE='T'
    J'ai fais quelques recherches, mais je n'arrive pas à récupérer la liste des tables pour un schéma précis... Auriez vous des pistes? L'idée serait ensuite de récupérer chaque colonnes + propriétés (type de données, longueur, etc)


    EDIT:

    A priori, SYSTABLES existerait aussi au sein des schémas. Ce qui me donne la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT SYSCOLUMNS.TABLE_NAME, SYSCOLUMNS.COLUMN_NAME, SYSCOLUMNS.DATA_TYPE, SYSCOLUMNS.LENGTH, SYSCOLUMNS.COLUMN_TEXT
       FROM COMDTM30.SYSCOLUMNS AS SYSCOLUMNS;
    Le fait est que cette requête ne renvoi aucun résultat... Je continue mes recherches dans ce sens.

    Merci par avance,

    ZenZiTone.

  2. #2
    Membre régulier Avatar de Macfurp
    Inscrit en
    Octobre 2006
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 62
    Points : 76
    Points
    76
    Par défaut
    Bonjour,

    tu as différentes possibilités, soit interroger les vues du schéma SYSCAT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM SYSCAT.TABLES WHERE TABSCHEMA = 'SYSIBM' ;
    Soit directement les tables du schéma SYSIBM :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM SYSIBM.SYSTABLES WHERE CREATOR = 'SYSIBM' ;
    Après si tu souhaites visualiser les colonnes d'une table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT COLNAME, TYPENAME, LENGTH FROM SYSCAT.COLUMNS WHERE TABSCHEMA = 'SPIVE001' and TABNAME = 'PART' order by COLNO;
    Si tu souhaites voir la structure complète de la table (en mode commande) :

    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
     
    DESCRIBE TABLE SPIVEMDR.ETAB
     
     
                                    Data type                     Column
    Column name                     schema    Data type name      Length     Scale Nulls
    ------------------------------- --------- ------------------- ---------- ----- ------
    ID_ENTR                         SYSIBM    CHARACTER                   30     0 Yes   
    ID_STRUCT                       SYSIBM    CHARACTER                    5     0 Yes   
    ENSGN_ETS                       SYSIBM    GRAPHIC                     32     0 Yes   
    ID_PART                         SYSIBM    CHARACTER                   14     0 Yes   
    NUM_SIREN_ENTR                  SYSIBM    CHARACTER                    9     0 Yes   
    NUM_SIRET_ETS                   SYSIBM    CHARACTER                   14     0 Yes   
    ADR_LIGNE3                      SYSIBM    GRAPHIC                     38     0 Yes   
    ADR_LIGNE4                      SYSIBM    GRAPHIC                     38     0 Yes   
    ADR_LIGNE5                      SYSIBM    GRAPHIC                     38     0 Yes   
    ADR_LIGNE6                      SYSIBM    GRAPHIC                     38     0 Yes   
    ADR_EMAIL_PART_MLS              SYSIBM    GRAPHIC                    100     0 Yes   
    NUM_TEL_FIX                     SYSIBM    GRAPHIC                     17     0 Yes   
    NUM_TEL_MOBL                    SYSIBM    GRAPHIC                     17     0 Yes   
    NUM_FAX                         SYSIBM    GRAPHIC                     17     0 Yes   
    ID_PORTEF                       SYSIBM    CHARACTER                    4     0 Yes   
      15 record(s) selected.
    ETC...

  3. #3
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Bonjour Macfurp, merci pour ta réponse.

    J'ai essayé les requêtes que tu as proposé, mais je reçois des réponses du type :
    COLUMNS de type *FILE dans SYSCAT non trouvé.
    La version de DB2 est en cause?

    Sinon, j'ai essayé la requête ajouté dans EDIT: sur un autre schéma que celui visé et ça fonctionne comme je le souhaite. Des droits sur les schémas peuvent-ils être en cause?

  4. #4
    Membre régulier Avatar de Macfurp
    Inscrit en
    Octobre 2006
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 62
    Points : 76
    Points
    76
    Par défaut
    Hum... je ne sais pas peut être un problème de client DB2...

    Sinon un lien vers les tables du catalogue Iseries :

    http://publib.boulder.ibm.com/infoce...atalogtbls.htm

  5. #5
    Membre régulier Avatar de Macfurp
    Inscrit en
    Octobre 2006
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 62
    Points : 76
    Points
    76
    Par défaut
    Le lien suivant fourni des informations sur le catalogue Iseries et la façon de l'utiliser :

    http://www-01.ibm.com/support/knowle...afzcatalog.htm

    tu devrais y trouver ton bonheur, par 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    There are three classes of catalog views:
     
        IBM® i catalog tables and views
     
        The IBM i catalog tables and views are modeled after the ANS and ISO catalog views, but are not identical to the ANS and ISO catalog views. These tables and views are compatible with prior releases of DB2 for i.
     
        These tables and views exist in schemas QSYS and QSYS2.
     
        The catalog tables and views contain information about all tables, parameters, procedures, functions, distinct types, packages, Start of change XSR objects, End of change views, indexes, aliases, sequences, variables, triggers, and constraints in the entire relational database. When an SQL schema is created, an additional subset of these views are created into the schema that only contain information about tables, packages, views, indexes, and constraints in that schema.
        ODBC and JDBC catalog views
     
        The ODBC and JDBC catalog views are designed to satisfy ODBC and JDBC metadata API requests. For example, SQLCOLUMNS. These views are compatible with views on DB2 LUW Version 8. These views will be modified as ODBC or JDBC enhances or modifies their metadata APIs.
     
        These views exist in schema SYSIBM.
        ANS and ISO catalog views
     
        The ANS and ISO catalog views are designed to comply with the ANS and ISO SQL standard (the Information Schema catalog views). These views will be modified as the ANS and ISO standard is enhanced or modified.
     
        There are several columns in these views that are reserved for future standard enhancements.
     
        There are two versions of these views:
            The first version of these views exist in schema INFORMATION_SCHEMA1. Only rows associated with objects to which the user has some privilege are included in the views. This version is compatible with the ANS and ISO SQL standard.
     
            If you use of this set of catalog views to prevent users from seeing any information about objects to which they have no privilege, you should revoke privileges to the other catalog views from users and PUBLIC.
            The second version of these views exist in schema SYSIBM. All rows are included in these views whether or not the user has some privilege to the objects associated with rows in the views. These views are compatible with views on DB2 LUW Version 8 and will generally perform better than the ANS and ISO views in QSYS2.
     
        For example, assume that a user has the SELECT privilege to the QSYS2.TABLES and SYSIBM.TABLES catalog views but does not have any privilege to a table called WORK.EMPLOYEE. The following SQL statement will not return a result row:
     
          SELECT *
            FROM QSYS2.TABLES
            WHERE TABLE_SCHEMA = 'WORK' AND TABLE_NAME = 'EMPLOYEE' 
     
        However, the following SQL statement will return a result row:
     
          SELECT *
            FROM SYSIBM.TABLES
            WHERE TABLE_SCHEMA = 'WORK' AND TABLE_NAME = 'EMPLOYEE'

  6. #6
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Merci beaucoup pour les liens. Je vais y jeter un œil

  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
    Citation Envoyé par Macfurp Voir le message
    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
     
    DESCRIBE TABLE SPIVEMDR.ETAB
     
     
                                    Data type                     Column
    Column name                     schema    Data type name      Length     Scale Nulls
    ------------------------------- --------- ------------------- ---------- ----- ------
    ID_ENTR                         SYSIBM    CHARACTER                   30     0 Yes   
    ID_STRUCT                       SYSIBM    CHARACTER                    5     0 Yes   
    ENSGN_ETS                       SYSIBM    GRAPHIC                     32     0 Yes   
    ID_PART                         SYSIBM    CHARACTER                   14     0 Yes   
    NUM_SIREN_ENTR                  SYSIBM    CHARACTER                    9     0 Yes   
    NUM_SIRET_ETS                   SYSIBM    CHARACTER                   14     0 Yes   
    ADR_LIGNE3                      SYSIBM    GRAPHIC                     38     0 Yes   
    ADR_LIGNE4                      SYSIBM    GRAPHIC                     38     0 Yes   
    ADR_LIGNE5                      SYSIBM    GRAPHIC                     38     0 Yes   
    ADR_LIGNE6                      SYSIBM    GRAPHIC                     38     0 Yes   
    ADR_EMAIL_PART_MLS              SYSIBM    GRAPHIC                    100     0 Yes   
    NUM_TEL_FIX                     SYSIBM    GRAPHIC                     17     0 Yes   
    NUM_TEL_MOBL                    SYSIBM    GRAPHIC                     17     0 Yes   
    NUM_FAX                         SYSIBM    GRAPHIC                     17     0 Yes   
    ID_PORTEF                       SYSIBM    CHARACTER                    4     0 Yes   
      15 record(s) selected.
    Es-tu sûr que cette syntaxe s'applique sur un DB2 for i (ou DB2/400, on ne sait plus trop ! ). En effet, je l'ai tenté dans le requêteur SQL d'iSeries Access, et cette syntaxe ne fonctionne pas. De plus, dans la doc IBM, ça ne correspond pas non plus. Qu'appelles-tu le mode commande ?

  8. #8
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Bonjour,

    J'ai fais plusieurs tests depuis le précédent message. J'ai notamment pu valider la requête suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT 
       SYSCOLUMNS.TABLE_NAME, 
       SYSCOLUMNS.COLUMN_NAME,
       SYSCOLUMNS.DATA_TYPE,
       SYSCOLUMNS.LENGTH,
       SYSCOLUMNS.COLUMN_TEXT
     
    FROM 
       MONSCHEMA.SYSCOLUMNS AS SYSCOLUMNS
    Le problème est que le résultat de la requête est vide sur le seul schéma qui m'intéresse. Les autres, qui sont semblable, renvoient bien le résultat souhaité...

  9. #9
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Bonjour.

    A moins d'en avoir fait des copies, les tables, vues et index (fichiers) système SYSxxx se trouvent dans QSYS2 :
    SYSCOLUMNS, SYSCHKCST, SYSCST, SYSFUNCS, SYSINDEXES, SYSKEYCST, SYSTABLES, SYSTRIGCOL, SYSTRIGDEP, SYSTRIGGER, SYSVIEWS, etc… Ce sont surtout des index et des vues basés sur les tables QADBxxx de QSYS :

    - QSYS/QADBXREF : Basic database file attribute information
    - QSYS/QADBFDEP : Cross-reference information about all the database files on the system (except those database files that are in the QTEMP library)
    - QSYS/QADBIFLD : Database file field information
    - QSYS/QADBKFLD : Database file key field information
    - QSYS/QADBFCST : Referential constraint file information
    - QSYS/QADBCCST : Referential constraint field information
    - QSYS/QADBPKG : SQL package information
    - QSYS/QADBXRDBD : Remote database directory information
    - QSYS/QADBXTRIGB : Lists the triggers on your iSeries
    - Etc…

  10. #10
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Bonjour Hédhili Jaïdane, merci pour ta réponse.

    Effectivement, les données que je souhaite se trouve également dans QSYS2. Un filtre sur le nom du schéma souhaité dans la close WHERE et le résultat est celui recherché.

    Merci pour votre aide !

    PS:
    Le problème est que le résultat de la requête est vide sur le seul schéma qui m'intéresse. Les autres, qui sont semblable, renvoient bien le résultat souhaité...
    Je laisse ceci de coté pour le moment car le passage par QSYS2 "résout" le problème.

  11. #11
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Citation Envoyé par ZenZiTone Voir le message

    Le problème est que le résultat de la requête est vide sur le seul schéma qui m'intéresse. Les autres, qui sont semblable, renvoient bien le résultat souhaité...
    Bonjour.

    Je pense que MONSCHEMA.SYSCOLUMNS n'est qu'une copie temporaire, avec ou sans filtre, de QSYS2/SYSCOLUMNS, faite par exemple par un CPYF. Si c'est le cas, cette vue n'est pas maintenue par le système sauf si c'est une vue basée sur une table QSYS/QDBAxxx.
    Il faut se méfier de ces vues/index SYSxxxx qui ne sont pas d'origine dans QSYS2 et bien vérifier qu'elles sont bien basées sur une ou plusieurs tables QSYS/QDBAxxx.

    Pour info, ces tables QSYS/QDBAxxx sont très sécurisées même en lecture contrairement aux vues/index QSYS2/SYSxxxx pour lesquelles l'accès en lecture est plus libre.

  12. #12
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Citation Envoyé par Hédhili Jaïdane Voir le message
    Bonjour.

    Je pense que MONSCHEMA.SYSCOLUMNS n'est qu'une copie temporaire, avec ou sans filtre, de QSYS2/SYSCOLUMNS, faite par exemple par un CPYF. Si c'est le cas, cette vue n'est pas maintenue par le système sauf si c'est une vue basée sur une table QSYS/QDBAxxx.
    Il faut se méfier de ces vues/index SYSxxxx qui ne sont pas d'origine dans QSYS2 et bien vérifier qu'elles sont bien basées une ou plusieurs tables de QSYS/QDBAxxx.

    Pour info, ces tables de QSYS/QDBAxxx sont très sécurisées même en lecture contrairement aux vues/index QSYS2/SYSxxxx pour lesquelles l'accès en lecture est plus libre.
    Merci beaucoup pour ces précisions

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

Discussions similaires

  1. Lister les tables
    Par chahi dans le forum PostgreSQL
    Réponses: 11
    Dernier message: 13/01/2009, 13h58
  2. [Debutant] Lister les tables d'une base de données
    Par Konrad Florczak dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/07/2005, 17h24
  3. Lister les tables d'une base
    Par pg_user dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 13/05/2005, 11h41
  4. [ODBC] Intranet en PHP : Lister les tables d'une base Access
    Par fblouet dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 28/10/2003, 15h46
  5. Lister les tables d'une Base
    Par YanK dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 08/10/2003, 11h40

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