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

AS/400 Discussion :

Afficher les contraintes d'une base


Sujet :

AS/400

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Points : 8
    Points
    8
    Par défaut Afficher les contraintes d'une base
    Bonjour à tous,

    Je suis en reverse engineering sur une base DB2400 : 2800 et quelques tables...

    Je voudrais récupérer le schema de cette base. J'ai donc requeté en ODBC quelques tables de QSYS2 : j'ai bien récupéré les infos sur QSYS2.SYSTABLES et QSYS2.SYSCOLUMNS (infos concordantes celles de DTM SQL Editor) mais rien n'est dispo sur QSYS2.SYSCST ou QSYS2.SYSCSTCOL concernant mes clés primaires (pourtant listées par DTM).

    Où dois-je checker sinon dans mon QSYS2 ?!

    Merci d'avance pour vos lumières.

    Nico.

  2. #2
    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.

    Tu peux obtenir des infos sur les contraintes par :
    - DSPFD *all/*all type(*cst)
    - WRKPFCST ...
    - DSPDBR ...

    Iseries Access sur V5R4 le fait aussi il me semble

  3. #3
    Futur Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Bonjour Hédhili,
    Et merci pour votre retour.

    J'ai en effet déjà pu afficher mes contraintes par la commande :
    DSPFD FILE(MA-BIBLIO/*ALL) TYPE(*CST)

    Malheureusement, je dois trouver l'équivalent en requête SQL.
    En effet, j'attaque mon AS/400 par ODBC depuis un serveur Linux.
    Le but est de répliquer dynamiquement et quotidiennement la base DB2/400 sur une base MySQL : le schéma de la base DB2 pouvant évoluer dans le temps, je dois récupérer son schéma à chaque synchronisation.

    J'ai correctement récupéré les infos des tables et des colonnes mais mes contraintes ne semblent pas stockées dans la bibliothèque QSYS2.
    Pour info, je ne peux pas faire de batch automatisés sur mon AS/400 : je ne peux qu'exécuter des commandes ponctuelles. C'est ainsi que j'ai récupéré le nombre d'enregistrement par table :
    DSPFD FILE(MA-BIBLIO/*ALL) TYPE(*MBRLIST) OUTPUT(*OUTFILE) OUTFILE(QTEMP/OUTPUTNR)
    J'ai ensuite requêté QTEMP/OUTPUTNR depuis mon serveur Linux mais cela ne sera pas possible de manière automatisée.

    Cordialement,
    Nicolas RUIZ.

  4. #4
    Futur Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Je reviens sur ce que j'ai dis. Les commandes exécuté sur le shell AS400 ne m'affichent pas mes contraintes ...

    WRKPFCST FILE(MA-BIBLIO/*ALL TYPE(*ALL)
    -> (Aucune contrainte à afficher)

    DSPFD FILE(MA-BIBLIO/*ALL) TYPE(*CST)
    -> (Aucune contrainte ajoutée au fichier) pour tous mes fichiers

    DSPDBR FILE(MA-BIBLIO/*ALL)
    -> Quelques dépendances de données trouvées, sans contraintes (non systématiques, disons 20% de la base)

    Pourtant, mon petit outil DTM SQL Editor, lui aussi relié par ODBC sur la même base (mais depuis mon système Windows), me donne, pour 80% des tables, une clé primaire (pas de clés étrangères ou autre) :
    -> ALTER TABLE MA-BIBLIO.UNE-TABLE ADD CONSTRAINT SpecialColumn PRIMARY KEY (CHAMP1, CHAMP2)

    Les clés sont toujours nommées "SpecialColumn", quel que soit la table sur laquelle elle est appliquée. Elles peuvent par contre inclure une, deux ou plusieurs tables (pas forcement dans l'ordre d'affichage de celles-ci).

    Je continue de prospecter. Si j'avais vous aviez quelques éclaircissements à me donner ... Je manque de recul sur ce système : je le découvre depuis 2semaines, partant de rien ...

  5. #5
    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 Nicola,
    Bonjour tout le monde.

    D'abord je suis nul en SQL (c'est provisoire) et désolé j'étais absorbé par une installation et le démarrage d'un 515 V5R4 avec une migratipon d'applics S/36 dessus.

    Pour ton histoire d'automatisation, tu peux toujours écrire un prog. CL et y mettre toutes les commandes que tu passes puis tu le compiles. Tu peux y mettre un DLYJOB pour qu'il continue l'exécution à une heutre donnée ou le mettre dans une entrée des travaux planifiés (WRKJOBSCDE)

    Pour les contraintes, regarde si tu ne trouves pas quelque chose dans ces fichiers :
    - Referential constraint file information (QSYS/QADBFCST)
    - Referential constraint field information (QSYS/QADBCCST)

    Et puis, si je me permets, n'hésite pas à consulter les centres d'info d'IBM en fonction de ta version

    http://publib.boulder.ibm.com/infoce...v5r4/index.jsp

    A+

  6. #6
    Futur Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    C'est incroyable, aucune information non plus, pour ma bibliothèque, en réponse à ma requête de selection sur QSYS/QADBFCST ou QSYS/QADBCCST...

    A croire que DTM SQL Editor me génère les clés à lui tout seul !

    Je suis déjà depuis plusieurs jours sur les docs réferences d'IBM, je vais continuer ma lecture.

    @+

  7. #7
    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
    Il y a quand même quelques choses concernant d'autres biblios et d'autres fichiers dans QSYS/QADBFCST ou QSYS/QADBCCST ?

  8. #8
    Futur Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Oui, il y a une réponse pour les bibliothèques systèmes :

    SQL> select distinct(DBCCLN) from QSYS.QADBCCST
    +-----------+
    | DBCCLN |
    +-----------+
    | QMGTC |
    | QMGTC2 |
    | QSYS2 |
    | QUSRDIRDB |
    | QUSRSYS |
    +-----------+
    SQLRowCount returns -1
    5 rows fetched

    SQL> select distinct(dbccfl) from qsys.qadbfcst
    +-----------+
    | DBCCFL |
    +-----------+
    | QMGTC |
    | QMGTC2 |
    | QSYS2 |
    | QUSRDIRDB |
    | QUSRSYS |
    +-----------+
    SQLRowCount returns -1
    5 rows fetched

    Mais rien sur ma bibliothèque ....

  9. #9
    En attente de confirmation mail
    Homme Profil pro
    Inscrit en
    Février 2004
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Février 2004
    Messages : 204
    Points : 238
    Points
    238
    Par défaut
    Citation Envoyé par ruiz.nicolas Voir le message
    A croire que DTM SQL Editor me génère les clés à lui tout seul !
    il est tout à fait possible qu'il détermine lui même des potentielles clés, il n'y a pas forcément de contraintes au niveau BDD, elles peuvent avoir été gérées par programmation

    qu'on me corrige si je dis des âneries à quelques minutes du dodo bien mérité

  10. #10
    Futur Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Merci pour ta réponse.

    A ce moment là, si jamais DTM SQL Editor génère mes clés primaires par décision interne, quels mécanismes pourrait-il avoir employé pour sélectionner les champs à inclure ?

    Mes connaissances en SQL sont limitées sur ce point. Est-il possible de requêter une table pour obtenir un n-tuple unique ?! Cela me parait improbable.

    Prenons un exemple concret avec ma bibliothèque : la table ACC002W1.
    Je vous donne le code SQL rendu par DTM SQL Editor sur sélection de cette table, sachant que j'obtient les mêmes données en requêtant QSYS2.SYSTABLES et SYSCOLUMNS :

    create table MMBASLIB.ACC002W1(
    W1DAT NUMERIC(6) NOT NULL,
    W1BCH NUMERIC(8) NOT NULL,
    W1STR NUMERIC(3) NOT NULL,
    W1SUPP NUMERIC(6) NOT NULL,
    W1DPT NUMERIC(3) NOT NULL,
    W1TOFA NUMERIC(15,2) NOT NULL,
    W1TOTR NUMERIC(15,2) NOT NULL,
    W1DIF NUMERIC(7,2) NOT NULL
    )

    Par contre, les données suivantes restent pour l'instant cachées à mes requêtes SQL ou systèmes (DSPFD, etc...) :

    create index ACC002W1
    on MMBASLIB.ACC002W1 (W1STR asc, W1SUPP asc, W1DPT asc, W1BCH asc)

    ALTER TABLE MMBASLIB.ACC002W1
    ADD CONSTRAINT SpecialColumn
    PRIMARY KEY (W1STR, W1SUPP, W1DPT, W1BCH)

    On remarque que la liste des champs constituant la clé primaire n'est pas dans l'ordre d'affichage des champs de la table (celui-ci étant noté en dur dans la table QSYS2.SYSCOLUMNS).
    On remarque aussi qu'il ne sélectionne pas les constituants de la clé par le type des colonnes, il aurait inclu W1DAT sinon...

    Enfin bref, je nage en plein désarroi ... Sur ce, je retourne bouquiner les Red Books d'IBM.
    Je finirais peut-être par avoir le niveau pour une certif système AS400 lvl01 (à défaut d'aboutir tout de suite sur cet aspect de mon projet )

  11. #11
    En attente de confirmation mail
    Homme Profil pro
    Inscrit en
    Février 2004
    Messages
    204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Février 2004
    Messages : 204
    Points : 238
    Points
    238
    Par défaut
    alors pour ce qui est du reverse engineering, des outils gratuits tels que DBDesigner 4 sont capables de déduire d'une base MySQL les relations existantes entre les différentes tables, donc je suppose, je n'affirme pas, nuance , que le logiciel que tu utilises est capable de faire des merveilles... mais bon un jour après ma réponse, je me rends compte que j'ai peut être été un peu vite sur la lecture de ton soucis j'avais bien fait de préciser "qu'on me corrige si je dis des âneries à quelques minutes du dodo bien mérité"

    enfin bref, pour info, en DB2400, sur un fichier (une table en langage micro), tu peux créer des index bien entendu mais tu as surtout la possibilité de créer ce que l'on nomme des fichiers logiques, des index, qui n'ont pas été créés par sql mais à partir de fichier source puis compiler, ces logiques pointant sur des logiques (de 1 à plusieurs si jointure) sont peut être à la base de la détermination des cléfs par ton logiciel...

    je ne suis pas sur de moi, mais un index au sens sql du terme, ne permet pas de sélection ou d'omission tandis que les logiques permettent de préciser des clefs d'accès et/ou d'unicités tout en y précisant des filtres sur les différents champs composant les clefs...

  12. #12
    Futur Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Bonjour messieurs,

    J'ai requêté par STRSQL la table QSYS.QADBKFLD et j'ai retrouvé mes clés dessus. La table est architecturée avec chaque enregistrement comme un des champs de l'index d'une table, son ordre dans la liste et la biblio/table à partir de laquelle le champ est extrait. J'ai créé une petite routine qui me recréé une requête de création de clé primaire en SQL à partir de ces informations.

    Il est vrai après qu'il s'agit d'index et non de clés. Si ma base contient deux ou plus index par table, ma logique tombe. Si ma base contient des clés étrangères, ma logique tombe aussi, à priori. Mais il faut que j'aille très vite et il me semble en étudiant en diagonale ma base qu'elle ne contenait que aucun ou un index : aucune ou une clé primaire par table, pas de clés étangères.

    A suivre donc. Merci beaucoup pour votre aide les gars...

  13. #13
    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

    Citation Envoyé par ruiz.nicolas Voir le message
    Bonjour messieurs,..
    il ya des dames aussi sans qui ...
    ...
    J'ai requêté par STRSQL la table QSYS.QADBKFLD et j'ai retrouvé mes clés dessus...
    Je pense que DSPFD et DSPDBR auraient pu te donner la même chose ??

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

Discussions similaires

  1. [MySQL] Afficher les tables d'une base de données ?
    Par jack_1981 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 31/08/2006, 21h25
  2. Réponses: 3
    Dernier message: 10/08/2006, 17h43
  3. Tutoriel Afficher les infos d'une base de données
    Par dolf13 dans le forum Langage
    Réponses: 2
    Dernier message: 14/06/2006, 10h56
  4. Lister les contraintes d'une base
    Par squallJ dans le forum Oracle
    Réponses: 2
    Dernier message: 10/02/2006, 14h57
  5. Réponses: 4
    Dernier message: 29/11/2004, 16h51

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