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

Langage SQL Discussion :

Fonctionnement d'un trigger After


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Fonctionnement d'un trigger After
    Bonjour,

    Je souhaite faire un trigger qui permette lors de l'insertion d'une ligne dans une table le transfert de celle-ci dans une autre table.

    Syntaxe de mon trigger :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    create trigger transfert_données on table1
    After Insert As
     
    insert into table2
    select * from inserted
    Le problème est que si le trigger n'arrive pas à insérer dans la table table2 alors je n'ai pas ma donnée dans la table1.

    J'avais cru comprendre que le after Insert exécutait le trigger après l'insertion des lignes !

    Pouvez-vous m'aider sur la façon de faire afin que la commande insertion soit prise en compte dans la table1 même si le trigger ne s'exécute pas correctement*?


    Je vous remercie par avance de votre aide.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 879
    Points : 53 057
    Points
    53 057
    Billets dans le blog
    6
    Par défaut
    Avec un trigger AFTER si l'insertion n'a pas lieu, vous n'aurez jamais déclenchement du trigger.
    Optez soit pour un trigger BEFORE si votre SGBDR le supporte sinon pour in trigger INSTEAD OF !

    A +

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Le trigger se déclenche bien vu qu'il tente de faire l'insertion dans la table 2.

    Ce que je ne comprends pas c'est que même si le trigger échoue je devrais quand même avoir l'insertion dans la table1 ce qui n'est pas le cas.

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 879
    Points : 53 057
    Points
    53 057
    Billets dans le blog
    6
    Par défaut
    Non, car un ordre SQL est une transaction et le trigger est au sein de la transaction. Si violation de contrainte, alors ROLLBACK de la, transaction ce qui entraine l'annulation de la seconde insertion.

    Lisez ce que j'ai écrit sur les déclencheurs : http://sqlpro.developpez.com/cours/sqlaz/techniques/

    A +

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    J'ai bien compris le fonctionnement du rollback et des transactions ce que je n'arrive pas a comprendre c'est que le trigger after Insert est bien déclenché suite à une insertion.

    Donc la ligne d'insertion devrait être validée avant le déclenchement du trigger.

    Que les transactions présentes dans le trigger ne soient pas validées je comprends tout à fait mais pas la ligne déclenchant le trigger.

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Ce que vous n'avez pas compris c'est qu'il s'agit de la même transaction pour la ligne insérée initialement et celle insérée dans le trigger.

    Soit tout passe, soit rien ne passe.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Ok comme vous dites je n'avais pas compris cela !

    Merci pour la réponse.

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

Discussions similaires

  1. Trigger After au niveau instruction
    Par ze_patoche dans le forum Oracle
    Réponses: 2
    Dernier message: 18/10/2005, 12h33
  2. TRIGGER After Update
    Par Nounoursonne dans le forum Oracle
    Réponses: 8
    Dernier message: 20/07/2005, 13h33
  3. [9i] problème avec trigger after logon
    Par Michael# dans le forum Oracle
    Réponses: 2
    Dernier message: 17/03/2005, 12h14
  4. Trigger AFTER
    Par Maitre B dans le forum Développement
    Réponses: 2
    Dernier message: 11/06/2004, 09h56

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