2009-12-17 13 views
15

Solo una domanda veloce che senza dubbio qualcuno là fuori saprà la risposta a.Più istruzioni di inserimento/aggiornamento all'interno del trigger?

Devo essere in grado di fare più inserimenti/aggiornamenti all'interno di un trigger. Ogni tentativo si conclude con il fallimento :(

DROP TRIGGER IF EXISTS `Insert_Article`// 
CREATE TRIGGER `Insert_Article` AFTER INSERT ON `Article` 
FOR EACH ROW insert into FullTextStore (`Table`, `PrimaryKey`, `ColumnName`, `Data`, `Created`) values ('Article', NEW.ArticleID, 'Description', NEW.Description, UNIX_TIMESTAMP()) 
// 

Al momento, quanto sopra inserisce semplicemente una riga in una tabella in cui gli inserti tabella padre. Questo funziona bene.

Per arrivare a questo lavoro con i valori mulitple I bisogno di fare

DROP TRIGGER IF EXISTS `Insert_Article`// 
CREATE TRIGGER `Insert_Article` AFTER INSERT ON `Article` 
FOR EACH ROW insert into FullTextStore (`Table`, `PrimaryKey`, `ColumnName`, `Data`, `Created`) 
select 'Article', NEW.ArticleID, 'Description', NEW.Description, UNIX_TIMESTAMP() 
union 
select 'Article', NEW.ArticleID, 'Keywords', NEW.Keywords, UNIX_TIMESTAMP() 
// 

Ma ... ci deve essere un modo più semplice Quando provo utilizza;? di interrompere ogni dichiarazione, non riesce con

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL version for the right syntax to use near 'select 'Article', NEW.ArticleID, 'Keywords', 'NEW.Keywords, UNIX_TIMESTAMP())' at line 1 

Non riesco nemmeno a far funzionare più istruzioni di aggiornamento.

Sarebbe di grande aiuto se qualcuno potesse indicare cosa sto facendo di sbagliato?

Acclamazioni

Gavin

risposta

21

Dalla documentazione: Create Trigger Syntax

trigger_stmt è la dichiarazione di eseguire quando il grilletto attiva. Se si desidera eseguire più istruzioni , utilizzare il costrutto dell'istruzione composta BEGIN ... END . Questo consente inoltre di utilizzare gli stessi dichiarazioni che sono ammissibili entro routine memorizzate

CREATE TRIGGER testref BEFORE INSERT ON test1 
    FOR EACH ROW BEGIN 
    INSERT INTO test2 SET a2 = NEW.a1; 
    DELETE FROM test3 WHERE a3 = NEW.a1; 
    UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1; 
    END; 
+0

Tu sei la persona (essendo un mondo PC n tutto questo). Grazie mille. Penso di aver lasciato il BEGIN quando uso END. – Gavin

Problemi correlati