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 :

Trigger suppression et insertion


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 192
    Par défaut Trigger suppression et insertion
    Salut à tous

    Je veux créer un trigger qui supprime les champs d'une ligne voulu
    (on va dire quand num_materiel = "&num_materiel&"
    && date = "&date&"
    && km = "&km&"
    && evenement = "&evenement&" ))

    et qui avant de les supprimer les insert dans une table "historique_event"

    j'ai deja crée la table historique_event avec les memes champs que ma table qui sera supprimé ligne apres ligne ...

    Maintenant, j'ai fait un petit truc,

    Quelqu'un peut jeter un coup d'oeil ?
    Merci d'avance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    CREATE OR REPLACE TRIGGER Histo_event
    BEFORE 
    DELETE ON parc_gestion_vehicule 
    BEGIN 
    INSERT INTO parc_historique_event
         ( num_materiel,
           date,
           km,
           evenement,
           prestataire,
    	   montant,
    	   nb_heure,
    	   commentaire, 
           createur )
        VALUES
           ( num_materiel,
           date,
           km,
           evenement,
           prestataire,
    	   montant,
    	   nb_heure,
    	   commentaire, 
           createur ).

  2. #2
    say
    say est déconnecté
    Membre Expert
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Par défaut
    VALUES
    ( OLD.num_materiel,
    OLD.date,
    OLD. km,
    OLD.evenement,
    OLD.prestataire,
    OLD.montant,
    OLD.nb_heure,
    OLD.commentaire,
    OLD.createur )
    il me semble...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 192
    Par défaut
    arff
    erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Msg*156, Niveau*15, État*1, Ligne*1
    Syntaxe incorrecte vers le mot clé 'OR'.
    Msg*128, Niveau*15, État*1, Ligne*16
    Le nom "OLD.num_materiel" n'est pas autorisé dans ce contexte. Les expressions valides sont des constantes, des expressions constantes et (dans certains contextes) des variables. Les noms de colonnes ne sont pas autorisés.
    .

    De plus dans mon trigger, je n'exprime pas encore la condition que je supprime la ligne ou le num_materiel = &num_materiel& et dat =&dat& et km = ...

    Vous me suivez toujours ?

  4. #4
    say
    say est déconnecté
    Membre Expert
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Par défaut
    mouais, je m'y attendais un peu.

    En fait, je suis sous postgreSQL, ce n'est peut-être pas standard.
    J'ai typiquement le même style de trigger pour archivage avant suppression :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE OR REPLACE FUNCTION log.ft_logstudent()
      RETURNS trigger AS
    $BODY$DECLARE
     
    BEGIN
    	INSERT INTO t_logstudent (lu_id, ls_name, ls_firstname, ls_deluser,ls_deldate) VALUES (OLD.u_id, OLD.s_name, OLD.s_firstname, session_user, current_timestamp);
    	RETURN OLD;
    END;$BODY$
      LANGUAGE 'plpgsql' VOLATILE
      COST 100;
    ALTER FUNCTION log.ft_logstudent() OWNER TO charly;
    alors j'ai pas mieux.

    Désolé

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 192
    Par défaut
    Ton trigger marche chez toi ?

    Tu l'a fait ou la suppression ?
    A quoi corresponde tes variables et ce qui suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $BODY$DECLARE
     
    $BODY$
      LANGUAGE 'plpgsql' VOLATILE
      COST 100;
    ALTER FUNCTION log.ft_logstudent() OWNER TO charly;

  6. #6
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 456
    Par défaut
    Bonjour,
    Tu n'as pas précisé quel SGBd tu utilises. Avec MaxDb il faut utiliser :old.LeChamp dans les requêtes (mais pas dans le reste du code !).
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE TRIGGER T_UPDATE FOR TORPEDO.ARTICLE AFTER UPDATE EXECUTE(
    IF NEW.ETP_C_CODE = 'AIMP' THEN
        CALL TORPEDO.GESTIONMESSAGEATTENTE('FA',:NEW.ART_C_REF,NULL);
    UPDATE TORPEDO.ARTICLE SET ART_D_MODIF = NOW() WHERE ARTICLE.ART_C_REF = :NEW.ART_C_REF IGNORE TRIGGER;
    IF NEW.ETP_C_REASSORT = 'AIMP' THEN
    CALL TORPEDO.GESTIONMESSAGEATTENTE('MR',:NEW.ART_C_REF,NULL);
    )
    Tatayo

  7. #7
    say
    say est déconnecté
    Membre Expert
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Par défaut
    oui, oui il fonctionne depuis plus de 2 ans.

    de quelles variables parle tu??

    et ce que tu as cité, correspond à la syntaxe de déclaration de la fonction trigger... mais c'est pour postgresql

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TRIGGER trig_logstudent
      BEFORE DELETE
      ON cocktail.t_student
      FOR EACH ROW
      EXECUTE PROCEDURE log.ft_logstudent();

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

Discussions similaires

  1. Trigger suite à un insert.
    Par SQLnotForever dans le forum Administration
    Réponses: 7
    Dernier message: 19/03/2007, 16h41
  2. [SQL2005]Trigger On delete, insert, update(colonne)
    Par slim dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 27/02/2007, 16h36
  3. Simple Trigger before on insert.
    Par gregb34 dans le forum Oracle
    Réponses: 7
    Dernier message: 28/05/2006, 07h27
  4. Réponses: 2
    Dernier message: 01/03/2006, 15h16
  5. trigger suite a insert
    Par DaxTaz dans le forum Développement
    Réponses: 4
    Dernier message: 07/07/2004, 11h27

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