Vánoční nadílka Vánoční nadílka
Až 80% zdarma! Předvánoční BLACK FRIDAY akce. Více informací
Avatar
maxijoey
Člen
Avatar
maxijoey:9. července 9:44

Pomohl by mi někdo prosím s těmi Triggery? Vytvořil jsem takový malý, když proběhne nějaký update tak mi to do jiné tabulky hodí záznam o datu, uživateli, chtěl bych tam ale dostat i ten sql dotaz co to provedl. Jenže mám trochu problém. Zjistil jsem že tento kod:

INSERT INTO tracking(hodnota, datum, user, sql_dotaz)
VALUES('update',NOW(), USER(), (SELECT INFO FROM INFORMATION_SCHE­MA.PROCESSLIST WHERE id=CONNECTION_ID())

Mi sice přidá data, ale jen poslední dotaz což je právě vložení dat z triggeru.

Pokud zkusím toto, což by mělo fungovat, nejdřív vytáhnu poslední dotaz a pak to uložím nefunguje:

DECLARE original_query VARCHAR(1024);
SET original_query = (SELECT info INTO original_query FROM INFORMATION_SCHE­MA.PROCESSLIST WHERE id=CONNECTION_ID());

INSERT INTO tracking(hodnota, datum, user, sql_dotaz)
VALUES('update',NOW(), USER(), original_query)

Lépe řečeno phpmyadmin my ho nechce vzít. Řve na mě že mým divnou syntax. Vím že tam chybí BEGIN a END a CREATE ale to doplňuje phpmyadmin sám, jak jsem pochopil.

 
Odpovědět 9. července 9:44
Avatar
Odpovídá na maxijoey
Matúš Olejník:9. července 10:23

Pri deklarovaní premennej musíš pred jej názov dať @

DECLARE @original_query VARCHAR(1024);

a to priradenie do nej by som použil bez SELECT INTO, spôsobom

SET @original_query = (SELECT info FROM INFORMATION_SCHEMA.PROCESSLIST WHERE id = CONNECTION_ID());

alebo

SELECT @original_query = info FROM INFORMATION_SCHEMA.PROCESSLIST WHERE id = CONNECTION_ID());
Nahoru Odpovědět 9. července 10:23
/* I am not sure why this works but it fixes the problem */
Avatar
maxijoey
Člen
Avatar
Odpovídá na Matúš Olejník
maxijoey:9. července 10:32

Ty jo, ani tak ne..
Přikládám screen zápisu triggeru a další s chybou co to hází.

 
Nahoru Odpovědět 9. července 10:32
Avatar
Odpovídá na maxijoey
Matúš Olejník:9. července 10:36

Jaj skús bez bodkočiarky za deklaráciou

Editováno 9. července 10:38
Nahoru Odpovědět 9. července 10:36
/* I am not sure why this works but it fixes the problem */
Avatar
maxijoey
Člen
Avatar
maxijoey:9. července 10:40

No, zkouším všechno možný, bez středníku na konci, bez zavináče, s nima. Mám je jeden řádek momentálně a to je ta deklarace a stále píše že je divná syntax.

 
Nahoru Odpovědět 9. července 10:40
Avatar
maxijoey
Člen
Avatar
maxijoey:9. července 11:17

Takže, funkční trigger vypadá takto:
BEGIN
DECLARE original_query VARCHAR(1024);
SET @original_query = (SELECT info FROM INFORMATION_SCHE­MA.PROCESSLIST WHERE id = CONNECTION_ID());
INSERT INTO tracking(hodnota, datum, user, sql_dotaz)
VALUES('update', NOW(), USER(), @original_query);
END

problém nyní je, že se mi proti očekávání do original_query nedostává dotaz který updatoval zaznamy tabulky ale stále dotaz z triggeru. Jak toho docílím? Potřebuji mít uložený ten sql dotaz provedl update tabulky.

 
Nahoru Odpovědět 9. července 11:17
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.