Autor | Zpráva | ||
---|---|---|---|
d.b.cooper Profil * |
#1 · Zasláno: 1. 10. 2015, 12:46:49
Zdravím mohl by mi někdo poradit co je zde špatně ? (je to ořezaná verze)
CREATE TRIGGER `aft_upd_cond` AFTER UPDATE ON `users` FOR EACH ROW BEGIN INSERT INTO `users_data` (id,cond_cache) VALUES(NEW.id, 1 ) ON DUPLICATE KEY UPDATE NEW.cond_cache = 1 END; má to po updatu přidat záznam se stejným id do jiné tabulky v závislosti 1:1 snazil jsem se složit spoušť podle manuálu ale nefunguje to nejsem jistý tím NEW. kde má a nemá být 1) jestli ho mám brát pouze jako hodnoty sloupců z tabulky users po provedení update na kterým je navázán trigger protože jsem viděl příklad kde je dáno i v update jako proměná která se nastavuje což mi pak nedává smysl a pravděpodobně by to mělo být i sloupců pro insert ... což teda nefunguje taky 2) pokud bych spoušť na after update a after insert stačí nahradit "AFTER UPDATE" "AFTER UPDATE AND AFTER INSERT" ? předem díky |
||
Kajman Profil |
#2 · Zasláno: 1. 10. 2015, 12:51:14
Tipuji, že v update nemá být NEW.cond_cache ale jen cond_cache.
Za příkazem by pak měl být asi středník (a nezapomeňte si změnit delimiter). |
||
d.b.cooper Profil * |
#3 · Zasláno: 1. 10. 2015, 13:45:59 · Upravil/a: Moderátor (editace znemožněna) 1. 10. 2015, 14:52:24
to už jsem testoval bohužel chyba bude asi jinde
ještě jsem zkoušel upravit vnitřek spouště s naplněním proměný (když jsem zjistil že to jde) pokud by trigger měl problém s DUPLICATE KEY ale to už jsem se asi úplně ztratil a ani to nebude ten problém viz. CREATE TRIGGER `aft_upd_cond` AFTER UPDATE ON `users` FOR EACH ROW BEGIN DECLARE iscreate INT; SELECT count(id) INTO iscreate FROM `users_data` WHERE id = NEW.id; IF(iscreate, INSERT INTO `users_data` (id, cond_cache) VALUES(NEW.id, 1) , UPDATE `users_data` SET cond_cache = 1 WHERE id = NEW.id ); END; teď to prozměnu hází chybu hned na řádce u DECLARE zatímco minule na posledním řádku před ENDem (po přidání středníku který se zdá být povinný) DECLARE jsem okopíroval z jiného funkčního příkladu :/ co je prosím delimiter ? delimiter jsem našel zde www.martin-sustek.cz/ulozene-procedury-a-triggery-v-mysql/ a byl to i zdroj meho problemu diky :) Moderátor juriad: Vkládej prosím kódy mezi značky [>pre] a [>/pre] (stačí kliknout na
![]() |
||
Časová prodleva: 7 let
|
0