Autor Zpráva
PH
Profil *
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
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 *
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á ...

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: