Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Trigger AFTER INSERT OR UPDATE OR DELETE, Błąd przy tworzeniu triggera
phpion
post 21.06.2008, 10:12:36
Post #1





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Witam ponownie smile.gif
Tym razem mam problem z utworzeniem triggera. Przewertowałem sporą część linków dotyczących tworzenia triggerów ale za Chiny nie mogę sobie poradzić z małą pierdołą. Chciałbym aby trigger był odpalany po wpisaniu, modyfikacji lub usunięciu danych z tabeli. W związku z czym napisałem:
  1. DELIMITER |
  2. CREATE TRIGGER update_category_items_t AFTER INSERT OR UPDATE OR DELETE ON card_category FOR EACH ROW
  3. BEGIN END|
  4. DELIMITER ;

co kończy się błędem:
Cytat
Script line: 21 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 'OR UPDATE OR DELETE ON card_category FOR EACH ROW
BEGIN

END' at line 1

O co chodzi? Próbowałem również magicznych konstrukcji (gdzieś znalazłem taki przykład) z:
  1. ... AFTER INSERT ON card_category OR UPDATE ON card_category ...

oraz:
  1. ... AFTER INSERT OR AFTER UPDATE OR AFTER DELETE ...

co również nie działa.

Moja wersja MySQL to 5.0.27.

Pozdrawiam,
pion

// EDIT:
Jest jeszcze ciekawsze zjawisko! Na razie chciałem utworzyć 3 osobne triggery, w związku z czym zrobiłem to tak:
  1. DROP TRIGGER update_category_items_tai;
  2. DROP TRIGGER update_category_items_tau; -- linia 19
  3. DROP TRIGGER update_category_items_tad; -- linia 20
  4.  
  5. DELIMITER |
  6. CREATE TRIGGER update_category_items_tai AFTER INSERT ON card_category FOR EACH ROW
  7. BEGIN CALL update_category_items (NEW.category_id);
  8. END|
  9.  
  10. CREATE TRIGGER update_category_items_tau AFTER UPDATE ON card_category FOR EACH ROW -- linia 28
  11. BEGIN CALL update_category_items (OLD.category_id);
  12. CALL update_category_items (NEW.category_id);
  13. END|
  14.  
  15. CREATE TRIGGER update_category_items_tad AFTER DELETE ON card_category FOR EACH ROW -- linia 34
  16. BEGIN CALL update_category_items (OLD.category_id);
  17. END|
  18. DELIMITER ;

Wywołaniem powyższego kodu skutkuje w:
Cytat
Script line: 19 Trigger does not exist
Script line: 20 Trigger does not exist
Script line: 28 Trigger already exists
Script line: 34 Trigger already exists

Nie rozumiem tu czegoś: dlaczego najpierw wypisywane jest, że trigger nie istnieje, a później, że już istnieje? W rezultacie zawsze dodawany jest tylko pierwszy trigger czyli update_category_items_tai.

Co robię źle? worriedsmiley.gif

Ten post edytował phpion 21.06.2008, 10:33:21
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 12:33