IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
maxijoey
Člen
Avatar
maxijoey:9.7.2018 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.7.2018 9:44
Avatar
Odpovídá na maxijoey
Matúš Olejník:9.7.2018 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.7.2018 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.7.2018 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.7.2018 10:32
Avatar
Odpovídá na maxijoey
Matúš Olejník:9.7.2018 10:36

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

Editováno 9.7.2018 10:38
Nahoru Odpovědět
9.7.2018 10:36
/* I am not sure why this works but it fixes the problem */
Avatar
maxijoey
Člen
Avatar
maxijoey:9.7.2018 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.7.2018 10:40
Avatar
maxijoey
Člen
Avatar
maxijoey:9.7.2018 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.7.2018 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.