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 :

Historisation via trigger


Sujet :

DB2

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 17
    Points : 14
    Points
    14
    Par défaut Historisation via trigger
    Bonjour, je dispose d'une base de données DB2 sur laquelle je souhaite vers du versionning. Dans la table que je souhaite versionné, je dispose d'une colonne AUTHOR qui permet de connaître l'auteur de la row.

    Cela fonctionne très bien et lorsque je fait un update, j'ai donc bien le nom du nouvelle auteur.

    Par contre lorsque je fait un delete, mon trigger devrait faire un insert dans ma table versionée avec l'auteur du delete. Comment puis-je avoir cette information ?

    Je sais qu'il existe une solution dans sql-server -> CONTEXT_INFO. Existe t'il un équivalent dans DB2 ??

    Il me faudrait donc un moyen de créer une sorte de variable utilisable dans mon trigger.

  2. #2
    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
    il existe quelques valeurs de registre type "current user", "current date"...

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Si vous êtes sur DB2 for Z/OS V10 ou plus, il existe une alternative aux triggers pour cet usage, avec les tables temporelles :
    https://www.ibm.com/support/knowledg...ablescont.html

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par pwrdwnsys Voir le message
    il existe quelques valeurs de registre type "current user", "current date"...
    Current user contiendra le user DB2 utiliser pour faire la query. Ici ça sera donc le user utiliser par mon application et non le user ayant faire réellement la suppression

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Si vous êtes sur DB2 for Z/OS V10 ou plus, il existe une alternative aux triggers pour cet usage, avec les tables temporelles :
    https://www.ibm.com/support/knowledg...ablescont.html
    Oui je suis bien avec un DB2 10. Mais avec les tables temporelles, comment puis-je savoir qui a fait la suppression ?

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Désolé, j'avais vu le besoin d'historique, mais celui de connaitre l'auteur du delete.

  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 morakevi Voir le message
    Current user contiendra le user DB2 utiliser pour faire la query. Ici ça sera donc le user utiliser par mon application et non le user ayant faire réellement la suppression
    Lorsqu'on crée le trigger associé à l'évènement "DELETE", il faut déclencher une instruction "insert into {table histo} (champ1, champ2, ..., Utilisateur) (select champ1, champ2, ..., current user from (table base})". Dans ce cas, c'est bien l'utilisateur courant au moment de l'exécution du trigger, donc celui ayant ouvert le travail, qui sera référencé dans la table d'historique.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    Salut pwrdwnsys,

    l'utilisateur courant au moment de l'exécution du trigger sera mon user db2 utiliser par mon application et non à l'utilisateur derrière

  9. #9
    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
    Je suis sur DB2/400, et dans ce cas, le current user est l'utilisateur qui déclenche le travail (donc celui qui fait le DELETE). DB2 est très lié au système sur un système i. Pour votre cas, je ne sais pas.

  10. #10
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par morakevi Voir le message
    Salut pwrdwnsys,

    l'utilisateur courant au moment de l'exécution du trigger sera mon user db2 utiliser par mon application et non à l'utilisateur derrière
    Je ne comprends pas ce que vous voulez dire par "l'utilisateur derrière"
    Quoi qu'il en soit, le user connecté à l'application qui fait la demande de DELETE sera bien celui récupéré par la requête

    SELECT USER FROM SYSIBM.SYSDUMMY1


    Et c'est bien ce que vous souhaitez non ?

  11. #11
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    Je vais essayé d'être plus clair. J'ai une application qui contient une connexion vers DB2 avec par exemple comme nom d'utilisateur APP1.

    Ensuite j'ai 50 personnes qui accèdent a mon application (chacun a un login-password) pour accédé à l'application. Lorsqu'un utilisateur va faire un DELETE, il va donc utiliser le user de 'lapplication APP1 pour faire le delete. Donc SELECT USER FROM SYSIBM.SYSDUMMY1 va me donner APP1 et non son login.

    Quand je fait un update, J'ai une colonne Auteur dans laquelle je set le login de l’utilisateur (ex MORAYKE). Mais pour le delete, je ne sais pas donner cette information.

  12. #12
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Si vous savez récupérer le login lors de l'UPDATE, il n'y a aucune raison pour que vous ne sachiez pas le faire lors d'un DELETE
    Peut être faut il passer par une une procédure stockée appelée par votre TRIGGER, procédure qui récupérera ce user pour pourvoir l'insérer dans votre table d'historique (il faut que vous retrouviez comment la colonne est affectée lors de l'update, et faire pareil dans la proc)

  13. #13
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2015
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mars 2015
    Messages : 98
    Points : 69
    Points
    69
    Par défaut
    Si ça peut faire avancer le schimiliblick..

    ADDPFTRG FILE(MonFichier) TRGTIME(*AFTER) TRGEVENT(*DELETE) PGM(ZTRPGM)

    avec ZTRPGM qui est appelé pour la maj du fichier log

Discussions similaires

  1. [9.3] Historisation et Trigger
    Par Soccent74 dans le forum Requêtes
    Réponses: 8
    Dernier message: 02/07/2015, 09h08
  2. Insérer EAN13 via trigger et procédure stockée
    Par Archibald29 dans le forum Firebird
    Réponses: 10
    Dernier message: 04/06/2014, 14h35
  3. classement automatique via TRIGGER
    Par RSI06 dans le forum SQL
    Réponses: 0
    Dernier message: 23/07/2009, 17h46
  4. MS SQL Server - Execution d'1 Lot DTS via un trigger
    Par DrChal dans le forum Développement
    Réponses: 1
    Dernier message: 27/06/2006, 14h05
  5. historique via trigger
    Par rgz dans le forum SQL
    Réponses: 6
    Dernier message: 25/06/2003, 19h12

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