2017-11-06 2 views
0

Ich habe Prozedur:Syntaxfehler beim Add-Trigger

CREATE PROCEDURE channge_max_priority() 
    BEGIN 
     update feeds set max_post_priority = 
     (
      select max(feed_posts.priority) 
      from feed_posts 
      where feed_posts.feed_id = feed_id 
     ) 
     where feeds.id = feed_id; 
    END 

Und ich möchte drei Trigger erstellen:

Arbeit
 CREATE TRIGGER feed_post_after_test AFTER INSERT (And update and delete) ON feed_posts 
     FOR EACH ROW EXECUTE PROCEDURE change_max_priority(); 

Verfahren korrekt, aber wenn ich Trigger versuchen beginnen - ich Fehler:

Error in query (1064): Syntax error near 'PROCEDURE change_max_priority()' at line 2 

Antwort

1

Sie haben ein Doppel nn Namens Verfahren:

ersetzen:

CREATE PROCEDURE channge_max_priority() 

von

CREATE PROCEDURE change_max_priority() 
0

Versuchen Sie die Update-Anweisung zu ändern, anstatt eine Verknüpfung zu verwenden, dies sollte funktionieren:

update feeds 
set max_post_priority = max(feed_posts.priority) 
FROM feeds f 
INNER JOIN feed_posts fp on feed_posts.feed_id = f.feed_id 
Group BY f.feed_id 
-1

In mysql, wird eine Prozedur ausgeführt unter Verwendung von CALL:

CREATE TRIGGER feed_post_after_test AFTER INSERT (And update and delete) ON feed_posts 
     FOR EACH ROW CALL change_max_priority(); 

Ich sehe nicht, warum Sie die Prozedur für jede Zeile ausführen sollten, die gesamte feeds Tabelle wird in einem Prozeduraufruf aktualisiert.

Auch nicht sicher, dass die letzte where feeds.id = feed_id; (kurz vor END) in der Prozedur korrekt ist.

Verwandte Themen