21. září bude sraz! Od 18.00 v restauraci Tradice v Praze u Anděla
Autor Zpráva
d.b.cooper
Profil *
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
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 *
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 ).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0