2013-03-05 2 views
0

Je veux faire 2-3 déclenchements pour 1 table. Par exemple (ce sont mes requêtes):créer plusieurs déclencheurs pour une table

DELIMITER $$ 

CREATE OR REPLACE TRIGGER IF EXISTS insert_before_update_slugrapat BEFORE UPDATE ON slugrapat 
FOR EACH ROW 
BEGIN 
INSERT INTO record_pemakaian_slug_rapat(rc_sr_size, rc_sr_stockawal, rc_sr_holling, rc_sr_store, rc_sr_sales, rc_sr_sisa, rc_sr_lastdate) 
VALUES(new.sr_size, new.sr_stockawal, new.sr_holling, new.sr_store, new.sr_sales, new.sr_sisa, new.sr_lastdate); 
/
CREATE OR REPLACE TRIGGER IF EXISTS insert_before_update_slugrapat BEFORE UPDATE ON slugrapat 
FOR EACH ROW 
BEGIN 
INSERT INTO so_slugrapat(sr_size, sr_sisa, sr_stockakhir, sr_stockopname, sr_lastdate) 
VALUES(new.sr_size, new.sr_sisa, new.sr_stockakhir, new.sr_stockopname, new.sr_lastdate); 
END $$ 

DELIMITER ; 

et l'erreur dit:

Error code 1064, SQL state 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TRIGGER IF EXISTS insert_before_update_slugrapat BEFORE UPDATE ON slugrapat 
FOR ' at line 1 

J'ai essayé plusieurs façons qui ont été affichées sur stackoverflow mais il ne fonctionne pas.

+0

Pourquoi est un bout '/' Là? – hjpotter92

+0

pourquoi ne pas combiner tout en un, puisqu'ils se produisent sur la même table 'BEFORE UPDATE'? – SparKot

+0

err .. parce que je lis dans un autre post et il dit pour 2 déclencheurs sur le même script, je dois ajouter "/" pour remplacer "GO" dans mysql. Est-ce faux? – ShenWu

Répondre

0

vérifier ceci:

DROP TRIGGER insert_before_update_slugrapat; 

DELIMITER $$ 

CREATE TRIGGER insert_before_update_slugrapat 
    BEFORE UPDATE 
    ON slugrapat 
    FOR EACH ROW 
BEGIN 
    INSERT INTO record_pemakaian_slug_rapat(rc_sr_size, 
              rc_sr_stockawal, 
              rc_sr_holling, 
              rc_sr_store, 
              rc_sr_sales, 
              rc_sr_sisa, 
              rc_sr_lastdate) 
    VALUES (new.sr_size, 
      new.sr_stockawal, 
      new.sr_holling, 
      new.sr_store, 
      new.sr_sales, 
      new.sr_sisa, 
      new.sr_lastdate); 

    INSERT INTO so_slugrapat(sr_size, 
          sr_sisa, 
          sr_stockakhir, 
          sr_stockopname, 
          sr_lastdate) 
    VALUES (new.sr_size, 
      new.sr_sisa, 
      new.sr_stockakhir, 
      new.sr_stockopname, 
      new.sr_lastdate); 
END$$ 
DELIMITER; 
+0

ouah! ça marche totalement .. merci beaucoup sparkot! – ShenWu

0

Essayez deux solutions. 1.Mettre tout votre code à l'intérieur d'un multiple de déclenchement et de l'utilisation et commencer déclaration fin 2.Retirer délimiteurs, Begin et End

+0

ne fonctionne toujours pas .. im confus parce que l'erreur indique: Code d'erreur 1064, l'état SQL 42000: Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de 'insert_before_update_slugrapat AVANT MISE À JOUR ON slugrapat POUR CHAQUE RANG INSERT I' à la ligne 1 – ShenWu

+0

Abandonnez d'abord votre trigger existant. Et dans Mysql vous ne pouvez pas remplacer le déclencheur si existe et si c'est le cas perd la définition de Trigger lui-même .. – divyabharathi

+0

j'ai déjà trouvé la réponse de sparkot .. merci pour votre aide divy! – ShenWu

0
DELIMITER $$ 

DROP TRIGGER IF EXISTS insert_before_update_slugrapat; 

CREATE TRIGGER insert_before_update_slugrapat BEFORE UPDATE ON slugrapat 
FOR EACH ROW 
BEGIN 
INSERT INTO record_pemakaian_slug_rapat(rc_sr_size, rc_sr_stockawal, rc_sr_holling, rc_sr_store, rc_sr_sales, rc_sr_sisa, rc_sr_lastdate) 
VALUES(new.sr_size, new.sr_stockawal, new.sr_holling, new.sr_store, new.sr_sales, new.sr_sisa, new.sr_lastdate); 
END $$ 

DROP TRIGGER IF EXISTS insert_before_update_slugrapat_1; 
CREATE TRIGGER insert_before_update_slugrapat_1 BEFORE UPDATE ON slugrapat 
FOR EACH ROW 
BEGIN 
INSERT INTO so_slugrapat(sr_size, sr_sisa, sr_stockakhir, sr_stockopname, sr_lastdate) 
VALUES(new.sr_size, new.sr_sisa, new.sr_stockakhir, new.sr_stockopname, new.sr_lastdate); 
END $$ 

DELIMITER ; 
+0

j'ai déjà trouvé la réponse de sparkot .. merci pour votre aide Fathah! – ShenWu

Questions connexes