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 habitué
    Homme Profil pro
    Architecte technique
    Inscrit en
    septembre 2010
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Santé

    Informations forums :
    Inscription : septembre 2010
    Messages : 114
    Points : 171
    Points
    171

    Par défaut

    il existe quelques valeurs de registre type "current user", "current date"...

  3. #3
    Expert confirmé

    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    2 715
    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 : 2 715
    Points : 5 996
    Points
    5 996
    Billets dans le blog
    1

    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
    Expert confirmé

    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    2 715
    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 : 2 715
    Points : 5 996
    Points
    5 996
    Billets dans le blog
    1

    Par défaut

    Désolé, j'avais vu le besoin d'historique, mais celui de connaitre l'auteur du delete.

  7. #7
    Membre habitué
    Homme Profil pro
    Architecte technique
    Inscrit en
    septembre 2010
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Santé

    Informations forums :
    Inscription : septembre 2010
    Messages : 114
    Points : 171
    Points
    171

    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 habitué
    Homme Profil pro
    Architecte technique
    Inscrit en
    septembre 2010
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Santé

    Informations forums :
    Inscription : septembre 2010
    Messages : 114
    Points : 171
    Points
    171

    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
    Expert confirmé

    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    2 715
    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 : 2 715
    Points : 5 996
    Points
    5 996
    Billets dans le blog
    1

    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
    Expert confirmé

    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    2 715
    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 : 2 715
    Points : 5 996
    Points
    5 996
    Billets dans le blog
    1

    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)

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