Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



mysql - urceni, jestli doslo ke zmene v triggeru

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: mysql - urceni, jestli doslo ke zmene v triggeru

Autor: thx ♂

12:19:42 20.06.2012

pruda je to teda rozhodne :-), aspon co jsem se dival treba na pouziti kurzoru kuli iterovani nejakou "kolekci". Jestli bude pro mr prilis slozite nebo pomale, vyresim pres ten prg. jazyk.
Reseni sem potom pripadne dam, kazdopadne je to jeden z low-priority ukolu, tak to bude chvili trvat.
Diky za konzultaci.

Citovat příspěvek

 

Re: mysql - urceni, jestli doslo ke zmene v triggeru

Autor: Maaartin ♂

22:27:08 18.06.2012

thx napsal/a

Myslel jsem spis, jestli nejde neco (treba v PL/SQL, ktere bohuzel neznam) jako (pseudokod) ?
@changed = false;

@result = SHOW COLUMNS FROM xxx;
FOREACH @result as @col
IF IFNULL(NEW[@col.name] != OLD[@col.name], NEW[@col.name] IS NULL <> OLD[@col.name] IS NULL) THEN
@changed = true;
break;
ENDIF;
ENDFOREAC;



Jo, tak uz chapu cos myslel tim @changed. To vypada rozumne, prepsat to do storky pomoci tech prepared statements by nejak urcite slo, ale jak rikam, SQL je pruda a mozna by to bylo pomaly.

Citovat příspěvek

 

Re: mysql - urceni, jestli doslo ke zmene v triggeru

Autor: thx ♂

11:01:19 18.06.2012

Diky moc za odpoved.

Prepared statements me nenapadly, to je kazdopadne zajimave a jsem zase o kousek vzdelanejsi.

Myslel jsem spis, jestli nejde neco (treba v PL/SQL, ktere bohuzel neznam) jako (pseudokod) ?


[code]
@changed = false;

@result = SHOW COLUMNS FROM xxx;
FOREACH @result as @col
IF IFNULL(NEW[@col.name] != OLD[@col.name], NEW[@col.name] IS NULL <> OLD[@col.name] IS NULL) THEN
@changed = true;
break;
ENDIF;
ENDFOREAC;

IF @changed THEN
-- jenom v tomhle pripade provest INSERT do history
ENDIF;

[/code]

Citovat příspěvek

 

Re: mysql - urceni, jestli doslo ke zmene v triggeru

Autor: Maaartin ♂

4:41:37 16.06.2012

thx napsal/a

mam AFTER UPDATE trigger, pro generovani historie. Kdyz se nad tabulkou provede update, tak se dany radek (NEW) ulozi do {nazev_tabulky}_history varianty tabulky.
Potiz je, ze i kdyz probehne update ktery nic realne nezmeni, tak pribyde do history tabulky zaznam stejny jako ten predchozi.



Hmm, duplikaty by sly mazat ale hezky to neni.

thx napsal/a

Slo by samozrejme udelat to, ze bych natvrdo deklaroval @changed = false, nasledne vytvoril tolik IFu, kolik mam sloupcu v tabulce a teprve pri nalezeni zmeny ukladal do history tabulky.



To zni hodne skarede. Nechapu k cemu @changed, nechapu kcemy vic IF-u. Neco jako

IF OLD.col1<>NEW.col1 OR OLD.col2<>NEW.col2 OR ... THEN BEGIN ... END;

chapu. Ale pro NULL to nefunguje, tam potrebujes neco jako

OLD.col1 IS NULL <> NEW.col1 IS NULL OR OLD.col1<>NEW.col1 ...

Takze je to 2x hnusnejsi. Mozna to bude chtit navic naky zavorky.

thx napsal/a

V tomhle pripade bych ale porad musel myslet na upravu triggeru pri jakemkoliv pridain / odebrani sloupce na tabulce.



No, pokud sces opravdu vsecky tak jo.

thx napsal/a

Jde ty IFy udelat nejak dynamicky ? Pres nejake PL/SQL treba projit vsechny sloupce tabulky a na nich testovat rovnost mezi OLD a NEW ?



Jde, ale kdyz budes delat naco jako
http://stackoverflow.com/a/190962/581205
v kazdym trigru, tak to bude pomaly jak prase.

Navic SQL je dost pruda, takze pokud mas k ty DB naky prg co s ni dela, tak bych do nho dal generovani toho trigru.
Prectes si z information_schema co to ma za sloupce, vygenerujes tu hruzu, prectes muj_trigger_template.sql a do nho za $hruza dosadis, provedes DROP a CREATE TRIGGER. Vsechno hezky automatizovany a muzes si to verzovat.

Mozna alternativa k tomu vsemu je tohle:
http://stackoverflow.com/a/6298881/581205

Citovat příspěvek

 

mysql - urceni, jestli doslo ke zmene v triggeru

Autor: thx ♂

14:11:26 15.06.2012

Ahoj,

mam AFTER UPDATE trigger, pro generovani historie. Kdyz se nad tabulkou provede update, tak se dany radek (NEW) ulozi do {nazev_tabulky}_history varianty tabulky.
Potiz je, ze i kdyz probehne update ktery nic realne nezmeni, tak pribyde do history tabulky zaznam stejny jako ten predchozi.
Slo by samozrejme udelat to, ze bych natvrdo deklaroval @changed = false, nasledne vytvoril tolik IFu, kolik mam sloupcu v tabulce a teprve pri nalezeni zmeny ukladal do history tabulky. V tomhle pripade bych ale porad musel myslet na upravu triggeru pri jakemkoliv pridain / odebrani sloupce na tabulce.
Jde ty IFy udelat nejak dynamicky ? Pres nejake PL/SQL treba projit vsechny sloupce tabulky a na nich testovat rovnost mezi OLD a NEW ?

Dik.

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: