Trigger za update količlina na lageru (Stock quantity) - upozorenje korisniku

Korisnik unosi količinu preparata koja se upisuje u tablicu tret_gnoj i automatski smanjuje lager za tu količinu u tablici zaliha. Fali mi dio koji bi alramirao korisnika, ako je unio količinu koja je veća od količine na lageru.
U teoriji bi bilo:

ELSE
BEGIN
PRINT 'Kolicina na zalihi je nedostatna’
END

ili (pokrenuo sam storanu proceduru koja bi trebala dići taj error, ali ništa)
ELSE
raise_application_error(‘Nedovoljna količina na zalihi!’,TRUE);
END IF;
END;

CREATE TRIGGER update_zalihaP
AFTER INSERT
ON tret_gnoj
FOR EACH ROW BEGIN
DECLARE
trenutno int;
SELECT kolicina
INTO trenutno
FROM zaliha
WHERE naziv_prep = NEW.naziv_prep;
IF (trenutno >= NEW.kolicina_prep)
THEN
UPDATE zaliha
SET kolicina = (kolicina-NEW.kolicina_prep)
WHERE naziv_prep = NEW.naziv_prep;
END IF;
END;

pokušao sam

ELSE
tbl_nt where nešto=nešto
END IF
END

gdje bi triger napravio update nepostojeće tablice, tj. ne bi napravio ništa, pa se redak koji bi se inače unio ne unese jer je količina prevelika, što je u redu, ali bi bilo još bolje da mogu napraviti da iskoči neka obavijest…

lp
Igor

A to ti se događa na serveru, ti moraš tu poruku prenjeti do korinsika što u biti znaći da možeš prvo provjeriti dali je sve ispravno za upis pa tek pokrenuti sql.
Ima mislim mogučnosti sql da izbaci error ali opet taj error moraš handladi na server strani.

[quote=“gorrc”]A to ti se događa na serveru, ti moraš tu poruku prenjeti do korinsika što u biti znaći da možeš prvo provjeriti dali je sve ispravno za upis pa tek pokrenuti sql.
Ima mislim mogučnosti sql da izbaci error ali opet taj error moraš handladi na server strani.[/quote]

trigger se okida na serveru, validaciju podataka koje korisnik unosi sam riješio, trebam znači:

trigger
declare
begin
if
tu se desi matematika koja radi
else
poruka korisniku da je unio preveliku količinu, ili neki dummy code ( tako da trigger odradi svoje, ali se količina ne upiše jer je prevelika)
end if
end

Eto:
There are some limitations on what can appear in statements that a trigger executes when activated:

The trigger cannot use the CALL statement to invoke stored procedures that return data to the client or that use dynamic SQL. (Stored procedures are permitted to return data to the trigger through OUT or INOUT parameters.)

The trigger cannot use statements that explicitly or implicitly begin or end a transaction such as START TRANSACTION, COMMIT, or ROLLBACK.

http://dev.mysql.com/doc/refman/5.1/en/trigger-syntax.html

Pazi ali ti sve radiš na serveru, kako će to doći do korisnika i da izbaci error?

Probaj sa ovim:

[quote=“gorrc”]Pazi ali ti sve radiš na serveru, kako će to doći do korisnika i da izbaci error?

Probaj sa ovim:


[/quote]

Probao jedno 5-6 varijanti, neke prolaze na serveru, ali ne rade sve ono što moraju: evo jedne

....
ELSE
UPDATE `Error` SET x=1;
END IF;
END;

[quote=“farkz”]Probao jedno 5-6 varijanti, neke prolaze na serveru, ali ne rade sve ono što moraju: evo jedne

....
ELSE
UPDATE `Error` SET x=1;
END IF;
END;

[/quote]

ovo će poslužiti za sada, dok ne pređem na mysql 5.5 (signal/resignal)

....
   WHERE nesto= NEW.nesto;
        ELSE
            CALL nepostojecaproc;
        END IF;
END;

Uopće nemam pojma zašto koristiš trigger za to. Potpuno nepotrebno.

ne znam kako bi drugačije to izveo, može neki hint?

Može info. koji programski jezik(da li možda koristiš nekakv framework), koja baza i struktura te dvije tablice, nešto imam u glavi ali mi je potrebno mal oviše detalja. Možeš i na PM.

U server side jeziku u kojem se tvoja aplikacija pokreće.
Ili radiš direktno na bazi?

web app radi u phpu, dok sam triggere pokrenuo u phpMYAdminu. Verzija je neka 5.x. Tokom 6. mjeseca će hoster napraviti apgrejd na 5.5 pa ću koristiti signal/resignal. Mislio sam napraviti proceduru koja bi imala neku poruku za korisnika, pa bi u triggeru u ELSE dijelu pozvao tu proceduru kad nije zadovoljen upit. Ako upali javim.


Copyright © 2020 WM Forum - AboutContact - Sponsored by: Mydataknox & Webmaster.Ninja