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 :

base de donnée : contraintes et déclencheurs


Sujet :

AS/400

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 64
    Points : 48
    Points
    48
    Par défaut base de donnée : contraintes et déclencheurs
    Bonjour,

    Cela fait longtemps que je n'ai plus vraiment pratiqué activement sur as400 mais on me demande d'expliquer des choses sur la Base de donnée :
    - les contraintes : ce doit être On ajoute un code si il existe dans une autre table.
    A mon époque je programmais cela. La base de donnée le fait elle toute seule ? Si oui comment.

    Déclencleur : est ce que ce sont des trigger ? Si on supprime un enregistrement père, les enregistrement enfants sont supprimer par exemples ?

    Est ce que la Base de donnée AS400 fait cela ?

  2. #2
    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
    contrainte => oui mais reste à savoir si vous souhaitez les gérer manuellement en programmation ou via DB2...

    déclencheur => il s'agit bien des trigger mais cela ne correspond pas à ce que tu dis, un trigger est une action qui va être appliquée selon la description de celui-ci, ainsi tu peux ajouter un trigger sur un fichier/table pour demander l'exécution d'une tâche précise à chaque mise à jour ou chaque consultation d'un enregistrement... on peut gérer les contraintes référentielles via des trigger éventuellement...

    l'AS400, précisément DB2400 gère effectivement les trigger, pour les contraintes référentielles, il me semble que oui mais n'ayant jamais eu l'occasion de m'y pencher, je laisse le soin à d'autres de te répondre...

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

    Si je me permets de compléter la réponse de Green.

    1) 4 types de contraintes :
    - Contrainte d'unicité (valeur d'un ou plusieurs champs)
    - Contrainte de clé primaire (champs et unicité)
    - Contrainte de vérification (sur les champs)
    - Contrainte référentielle entre fichier parent et fichier dépendant (définition de clé parente et de clé associée ou étrangère)
    * journalisation obligatoire
    * membre unique
    * on peut définir les actions à prendre en cas de suppression d'une ligne parente (le cas que tu évoques dans les triggers peut se faire ici)

    Voir les commandes
    - go CMDCST
    - ADDPFCST, WRK..., RMV..., CHG...
    - DSPFD avec type(*CST)
    - DSPDBR

    voir le lien http://publib.boulder.ibm.com/infoce...v5r3/index.jsp par exemple pour la v5r4 et regarde la doc sur Databse programming, SQL, etc...

    2) Triggers :

    Trigger = Déclencheur = un programme (objet de type *pgm) qui s'exécute automatiquement dès qu'une opération I/O (prédéfinie) sur un fichier a lieu : ajout, modification, suppression ou lecture. Le trigger est exécuté avant ou après ces actions (sauf la lecture : avant).

    - voir les cmdes ADDPFTRG, CHG..., RMV..., PRTTRGPGM
    - quelques incompatiblités entre intégrité référentielle et trigger

    Bien sûr, c'est très succint et rien ne vaut, comme d'habitude, une bonne doc.

    Cordialement
    Hédhili Jaïdane
    - - - - - - - - -

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 64
    Points : 48
    Points
    48
    Par défaut
    Merci pour ces pistes, reste à moi maintenant de fouiller de me faire des exemples.

    En fait mon expérience se résumait à faire des choses par programmes. On ne supprime pas un client si il a encore des commandes par exemples.

    Ce que je ne connais pas ce sont les trigger. Si quelqu'un a une bonne doc si possible avec exemples, je suis preneur.

  5. #5
    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 Stored Procedures, Triggers, and User-Defined Functions on DB2/400
    Télécharger & consulter le Redbook Stored Procedures, Triggers, and User-Defined Functions on DB2 Universal Database for iSeries sur le site de Big Blue.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 64
    Points : 48
    Points
    48
    Par défaut
    Et bien ici on est bien accueilli !

    Je vais essayer de survoler cette doc et d'en faire un résumé de ces 500 pages ! encore !

  7. #7
    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 aktos Voir le message
    Et bien ici on est bien accueilli !
    c'est le but d'un forum d'entraide

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 64
    Points : 48
    Points
    48
    Par défaut
    Bon j'ai réouvert le sujet car je crois que je ne suis pas encore OK.

    si quelqu'un a des exemples cela m'aiderais à comprendre.
    Quand on parle de contrainte :
    est ce que c'est des choses à codifier dans DDS ?
    Ou il y a encore autre chose ?

  9. #9
    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
    On ne peut pas faire un cours complet sur les contraintes ici.
    D'autres Redbooks traitant de SQL et de sa programmation en allant sur
    http://publib.boulder.ibm.com/infoce...v5r4/index.jsp
    puis, dans le panneau de gauche, cliquer sur
    iSeries Information Center Version 5.4>Programmation>Langages>SQL.
    Apparaissent alors dans le panneau de droite 4 Redbooks sur SQL qui répondront à tes questions. Charge les Redbooks sur ton DD puis fais une recherche "CONSTRAINT" dans le pdf.

    Quant à codifier les contraintes dans les DDS, c'est beaucoup plus limité que SQL et puis IBM ne fait plus évoluer les DDS depuis la 5.2 (ou la 5.3) je crois, donc autant se concentrer sur SQL où on retrouve toutes les contraintes des DDS + les spécifiques SQL.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 64
    Points : 48
    Points
    48
    Par défaut
    Le problème avec ce genre de doc, c'est que je m'y suis perdu !

    J'ai trouvé quelque chose qui m'a aidé
    http://www.volubis.fr/Pausecaf/PAUSECAF27.htm
    Cela peut aussi aider d'autres.
    C'est très résumé cela va à l'essentiel et il y a des exemples.
    J'avance...

  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
    Salut aktos.

    Jette un coup d'oeil sur les commandes :
    WRKPFCST, ADDPFCST, ...
    DSPFD TYPE(*CST) et DSPDBR permettent de visualiser les contraintes sur les PF.
    Dans les nouvelles versions c'est SQL qui fait bien cela avec ADD CONTRAINT dans CREATE et ALTER TABLE directement ou à l'aide de iSeries Navigator.

    En préchant à contre courant, on peut toujours continuer à programmer comme on le faisait avant à condition que les règles de gestion soient bien définies et arrêtées. C'est le cas de mes vieilles applics qui continuent à tourner depuis belle lurette. Mais l'avantage, par exemple, de la contrainte référentielle, objet de ton soucis (fichier parent et fichier dépendant), c'est que tous les outils utilisés pour la la mise à jour du fichier dépendant ou parent, respectent cette contrainte.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 64
    Points : 48
    Points
    48
    Par défaut
    En fait ce qui me manque c'est un peu de pratique avec QMQRY ou
    RUNSQLSTM enfin je mélange un peu tout cela.

    C'est bien beau de lancer des requète avec strsql mais il faut les garder et les executer dans un CL.
    Bon j'ai réussi à utiliser RUNSQLSTM : il faut juste ne pas oublier COMMIT(*NONE)

    Je pense qu'il faut que je connaisse les 2 méthodes avec la commande et avec le SQL.

    Bon, je continue a jouer un peu avec...

    Heu une question qui n'a rien à voir mais qui ne mérite peut être pas un sujet sur le forum :
    C'est quoi un répertoire sur AS400 ?
    Au début j'ai pensé à bibliothèque mais c'est pas forcément cela ?

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 64
    Points : 48
    Points
    48
    Par défaut
    J'ai fait un test avec WRKPFCST ca semble marcher !
    J'avance

    Maintenant avec SQL je continue

    Voila mon test non encore concluant avec SQL
    J'ai deux tables FDEMDEV un clé unisque et des champs dont DDACTI ( code activité ) 10 alpha

    Une autre table FACTITE avec ACCODE clé unique 10 alpha et designation

    alter table fdemdev
    add foreign key (ddacti) references factivite(ACCODE);
    mais je crois que ca marche pas car

    Table FDEMDEV in BIB does not have a matching parent key.

    J'ai bien vérifier les deux champs DDACTI et ACCODE ont bien 10 de long et alpha

    Idées ?

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

    Je ne connais pas très bien SQL, mais AMHA dans ton coding tu devrais mettre :

    ALTER TABLE FDEMDEV ADD CONSTRAINT nom_contrainte FOREIGN...

    et puis fais gaffe à ON DELETE et ON UPDATE

  15. #15
    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
    N'hésite pas d'abuser de F4 dans une session SQL

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 64
    Points : 48
    Points
    48
    Par défaut
    Je ne connaissais pas le F4 dans STRSQL ! C'est super quand on ne connait pas bien la syntax

    Par contre mon problème est toujours la mais c'est une plus belle ligne de code.

    Table FDEMDEV in BIB does not have a matching parent key.
    ===> ALTER TABLE FDEMDEV ADD CONSTRAINT ACTIVITEUNIQUE FOREIGN KEY
    (DDACTI) REFERENCES FACTIVITE (ACCODE) ON DELETE NO ACTION ON
    UPDATE RESTRICT

    De plus je voudrais juste interdire un code n'existant pas dans l'autre table. Je ne sais pas vraiment quoi mettre à on update on delete. Par défaut il y a rien.

    Le message signifie que les deux champs ne sont pas cohérent ? Ou bien il faut que je mette un index sur ce champs avec un logique ?

  17. #17
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    En DB2 for z/OS, la colonne de la table parente sur laquelle porte la clé étrangère de la table fille doit être clé primaire ou clé unique et doit corresponde à un index unique ...

    Je pense que c'est pareil en DB2 for I5-OS ...

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

    Idem sur l'AS.

    Surtout pas de logique, mais FACTIVITE doit être décrit avec clé unique (= ACCODE), le vérifier par DSPFD ou regarde les DDS.

    Essaye de faire la même chose avec ADDPFCST ou iSeries Navigator.

    Et puis, rien ne vaut les essais (désolé : ça a manqué pour le XV bleu hier) en utilisant les diverses options de ON DELETE et UPDATE. Tu n'échapperas pas non plus à la doc.

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 64
    Points : 48
    Points
    48
    Par défaut
    Avec addpfcst ca marche mais pas avec sql par contre j'ai une autre table identique : un code, un libellé et la les contraintes marchent avec sql et avec la commande.

    Je ne comprends pas pourquoi avec sql ca marche pas. Je laisse tomber. Le principal c'est que j'y arrive par un moyen.

    Le but est atteint : jouer un peu avec des contraintes histoire de tester.
    Pour ce qui est des trigger, je n'ai pas les droits sur le serveur que j'utilise.

    Au fait est ce que quelqu'un connait un irc ou salon jabber sur l'as400 ? Est ce que cela existe ?

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15
    Points : 15
    Points
    15
    Par défaut
    Excusez moi mais dans quels cas utilisez vous des triggers?
    Pour la maintenance c'est pas ce qu'il y a de plus pratique non?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Base de données et ses contraintes
    Par dafpp dans le forum Débuter
    Réponses: 10
    Dernier message: 18/10/2011, 10h40
  2. contraintes d'integrités absentes cote base de données
    Par coco-sup dans le forum Hibernate
    Réponses: 5
    Dernier message: 13/05/2008, 17h28
  3. contraintes entre tables de base de données
    Par Romantic_a dans le forum Windows Forms
    Réponses: 2
    Dernier message: 13/05/2008, 15h02
  4. Réponses: 4
    Dernier message: 27/03/2008, 09h39
  5. Réponses: 2
    Dernier message: 08/06/2006, 17h42

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