Autor | Zpráva | ||
---|---|---|---|
PH Profil * |
#1 · Zasláno: 30. 5. 2009, 20:09:20
Dobry den, prosim o zkontrolovani jednoducheho triggeru, nejak mi databaze hlasi chyby pri vlozeni a uz jsem z toho mimo :)
Trigger má zajistovat pri vytvoreni objednavky (tabulka nakup_items na radcich jsou polozky objednavky) nebylo mozno k polozce zadat vetsi mnozstvi, nez je na sklade (stav skladu je ve sxloupci onstore tabulky articles). Create trigger tbdObjednavka before insert on nakup_items for each row begin select onstore from articles where path = new.path; odecteno=onstore-new.objednano; if odecteno <1 then odecteno=0 new.objednano=onstore end if; pAktualizujSklad(new.path, odecteno); end; A procedura zapise novy stav skladu po objednavce: create procedure pAktualizujSklad(p varchar(128), c int) begin update articles SET onstore=c where path = p end; |
||
TomášK Profil |
#2 · Zasláno: 30. 5. 2009, 20:48:37 · Upravil/a: TomášK
Pár technických poznámek
* dávejte kód do tagů <pre>, je to mnohem čitelnější * "databaze hlasi chyby" - sem s nima, jaké chyby? * pojmenování tabulek mi přijde docela divné, hlavně kombinace češtiny a angličtiny (jen tip, s probémem to nesouvisí) * pohlídejte si, aby nedocházelo k chybám při paralelním běhu - zdá se mi, že uvedený skript není bezpečný, ale možná nemám pravdu Přijde mi divné, že za end u triggeru je středník, v MySQL jsem tam vždycky musel dát jiný delimiter, aby mi to nekolidovalo se středníky v kódu triggeru. Nemůže být chyba tam? Nic jiného tam od pohledu nevidím, chtělo by to tu chybovou hlášku... |
||
Kajman_ Profil * |
#3 · Zasláno: 30. 5. 2009, 21:48:23
Ještě tam bude asi chybět párkrát příkaz set, jednou příkaz call u té procedury a ze selectu se do proměnné dává pomocí sytaxe select sloupec into proměnná ...
|
||
Časová prodleva: 15 let
|
0