Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > AS/400
AS/400 Le Forum d'entraide sur IBM AS/400 - iSeries. RPG.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/10/2007, 17h34   #1
Membre à l'essai
 
Inscription : janvier 2007
Messages : 66
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 66
Points : 21
Points : 21
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 ?
aktos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2007, 10h17   #2
Membre confirmé
 
Avatar de Green Hornet
 
Homme
Inscription : février 2004
Messages : 204
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 39
Localisation : France, Indre et Loire (Centre)

Informations forums :
Inscription : février 2004
Messages : 204
Points : 219
Points : 219
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...
Green Hornet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2007, 12h09   #3
Membre Expert
 
Avatar de Hédhili Jaïdane
 
Homme Hédhili Jaïdane
Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol
Inscription : juin 2007
Messages : 1 678
Détails du profil
Informations personnelles :
Nom : Homme Hédhili Jaïdane
Localisation : Tunisie

Informations professionnelles :
Activité : Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol

Informations forums :
Inscription : juin 2007
Messages : 1 678
Points : 2 182
Points : 2 182
Envoyer un message via Skype™ à Hédhili Jaïdane
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
- - - - - - - - -
Hédhili Jaïdane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2007, 17h25   #4
Membre à l'essai
 
Inscription : janvier 2007
Messages : 66
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 66
Points : 21
Points : 21
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.
aktos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2007, 22h28   #5
Membre Expert
 
Inscription : novembre 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1 298
Points : 1 355
Points : 1 355
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.
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2007, 08h52   #6
Membre à l'essai
 
Inscription : janvier 2007
Messages : 66
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 66
Points : 21
Points : 21
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 !
aktos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2007, 10h59   #7
Membre confirmé
 
Avatar de Green Hornet
 
Homme
Inscription : février 2004
Messages : 204
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 39
Localisation : France, Indre et Loire (Centre)

Informations forums :
Inscription : février 2004
Messages : 204
Points : 219
Points : 219
Citation:
Envoyé par aktos Voir le message
Et bien ici on est bien accueilli !
c'est le but d'un forum d'entraide
Green Hornet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2007, 16h38   #8
Membre à l'essai
 
Inscription : janvier 2007
Messages : 66
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 66
Points : 21
Points : 21
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 ?
aktos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2007, 18h53   #9
Membre Expert
 
Inscription : novembre 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1 298
Points : 1 355
Points : 1 355
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.
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2007, 19h12   #10
Membre à l'essai
 
Inscription : janvier 2007
Messages : 66
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 66
Points : 21
Points : 21
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...
aktos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2007, 21h30   #11
Membre Expert
 
Avatar de Hédhili Jaïdane
 
Homme Hédhili Jaïdane
Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol
Inscription : juin 2007
Messages : 1 678
Détails du profil
Informations personnelles :
Nom : Homme Hédhili Jaïdane
Localisation : Tunisie

Informations professionnelles :
Activité : Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol

Informations forums :
Inscription : juin 2007
Messages : 1 678
Points : 2 182
Points : 2 182
Envoyer un message via Skype™ à Hédhili Jaïdane
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.
__________________

Hédhili Jaïdane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2007, 09h22   #12
Membre à l'essai
 
Inscription : janvier 2007
Messages : 66
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 66
Points : 21
Points : 21
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 ?
aktos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2007, 15h27   #13
Membre à l'essai
 
Inscription : janvier 2007
Messages : 66
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 66
Points : 21
Points : 21
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 ?
aktos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2007, 15h58   #14
Membre Expert
 
Avatar de Hédhili Jaïdane
 
Homme Hédhili Jaïdane
Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol
Inscription : juin 2007
Messages : 1 678
Détails du profil
Informations personnelles :
Nom : Homme Hédhili Jaïdane
Localisation : Tunisie

Informations professionnelles :
Activité : Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol

Informations forums :
Inscription : juin 2007
Messages : 1 678
Points : 2 182
Points : 2 182
Envoyer un message via Skype™ à Hédhili Jaïdane
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
__________________

Hédhili Jaïdane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2007, 16h14   #15
Membre Expert
 
Avatar de Hédhili Jaïdane
 
Homme Hédhili Jaïdane
Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol
Inscription : juin 2007
Messages : 1 678
Détails du profil
Informations personnelles :
Nom : Homme Hédhili Jaïdane
Localisation : Tunisie

Informations professionnelles :
Activité : Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol

Informations forums :
Inscription : juin 2007
Messages : 1 678
Points : 2 182
Points : 2 182
Envoyer un message via Skype™ à Hédhili Jaïdane
N'hésite pas d'abuser de F4 dans une session SQL
__________________

Hédhili Jaïdane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/10/2007, 20h16   #16
Membre à l'essai
 
Inscription : janvier 2007
Messages : 66
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 66
Points : 21
Points : 21
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 ?
aktos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/10/2007, 00h28   #17
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 098
Détails du profil
Informations personnelles :
Nom : Homme François Durand
Âge : 53
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Spécialiste Delivery Mainframe IBM
Secteur : Finance

Informations forums :
Inscription : octobre 2005
Messages : 1 098
Points : 1 707
Points : 1 707
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 ...
Luc Orient est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/10/2007, 10h26   #18
Membre Expert
 
Avatar de Hédhili Jaïdane
 
Homme Hédhili Jaïdane
Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol
Inscription : juin 2007
Messages : 1 678
Détails du profil
Informations personnelles :
Nom : Homme Hédhili Jaïdane
Localisation : Tunisie

Informations professionnelles :
Activité : Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol

Informations forums :
Inscription : juin 2007
Messages : 1 678
Points : 2 182
Points : 2 182
Envoyer un message via Skype™ à Hédhili Jaïdane
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.
__________________

Hédhili Jaïdane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/10/2007, 20h12   #19
Membre à l'essai
 
Inscription : janvier 2007
Messages : 66
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 66
Points : 21
Points : 21
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 ?
aktos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2007, 17h02   #20
Invité régulier
 
Inscription : octobre 2005
Messages : 15
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : octobre 2005
Messages : 15
Points : 7
Points : 7
Envoyer un message via MSN à anthonyl56
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?
anthonyl56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h47.


 
 
 
 
Partenaires

Hébergement Web