2009-12-17 5 views
15

Nur eine kurze Frage, dass kein Zweifel jemand da draußen die Antwort wissen wird.Mehrere Insert/Update-Anweisungen innerhalb Trigger?

Ich muss mehrere Einfüge/Updates innerhalb eines Triggers tun können. Jeder Versuch, mit dem Scheitern endet :(

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()) 
// 

Im Moment setzt der oben einfach eine Zeile in eine Tabelle, wenn die übergeordnete Tabelle Einsätzen. Dies funktioniert gut.

dies mit mulitple Werte zur Arbeit kommen I brauchen

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() 
// 

zu tun, aber ... es muss einen einfacheren Weg geben Wenn ich versuche, mit,? um jede Anweisung zu beenden, es scheitert mit

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 

Ich kann nicht sogar mehrere Update-Anweisungen funktionieren.

Es wäre eine große Hilfe, wenn jemand darauf hinweisen könnte, was ich falsch mache?

Prost

Gavin

Antwort

21

Aus der Dokumentation: Create Trigger Syntax

trigger_stmt die Anweisung auszuführen ist, wenn der Auslöser aktiviert. Wenn Sie mehrere Anweisungen ausführen möchten, verwenden Sie das BEGIN ... END zusammengesetzte Anweisungskonstrukt. Diese können Sie auch die gleichen Aussagen verwenden, die

innerhalb gespeicherte Routinen zulässig sind
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

Sie sind die Person (eine PC-Welt zu sein n alles). Vielen Dank. Ich glaube, ich hatte den BEGIN bei Verwendung von END weggelassen. – Gavin

Verwandte Themen