Run Code
|
API
|
Code Wall
|
Misc
|
Feedback
|
Login
|
Theme
|
Privacy
|
Patreon
pgsql trigger 01 - Ovocie
--PostgreSQL 9.5 --'\\' is a delimiter /* Vytvorenie novej tabulky Zakladne podmienky(CHECK): Nemozes mat viacej ovocia na sklade ako 1000, nemozes ist do minusu, a nemozes rezervovat viac ako je v obchode */ CREATE TABLE ovocie_na_predaj ( meno text PRIMARY KEY, v_obchode integer NOT NULL, rezervovane integer NOT NULL DEFAULT 0, CHECK (v_obchode between 0 and 1000 ), CHECK (rezervovane <= v_obchode) ); /* Tabulka uzivatelov ktory kupuju ovocie z obchodu */ CREATE TABLE kupa_ovocia ( id_kupcu serial PRIMARY KEY, meno_kupcu text, datum_ponuky timestamp default current_timestamp, druh_ovocia text REFERENCES ovocie_na_predaj, mnozstvo_ovocia integer ); /* vytvorenie funkcie ktora vracia trigger */ CREATE OR REPLACE FUNCTION rezervuj_tovar_po_ponuke () RETURNS trigger AS $$ BEGIN IF TG_OP = 'INSERT' THEN UPDATE ovocie_na_predaj SET rezervovane = rezervovane + NEW.mnozstvo_ovocia WHERE meno = NEW.druh_ovocia; ELSIF TG_OP = 'UPDATE' THEN UPDATE ovocie_na_predaj SET rezervovane = rezervovane - OLD.mnozstvo_ovocia + NEW.mnozstvo_ovocia WHERE meno = NEW.druh_ovocia; ELSIF TG_OP = 'DELETE' THEN UPDATE ovocie_na_predaj SET rezervovane = rezervovane - OLD.mnozstvo_ovocia WHERE meno = OLD.druh_ovocia; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; /* trigger ktory zavola funkciu po kazdej zmene ci pridani zaznamu do tabulky KUPA_OVOCIA */ CREATE TRIGGER sprava_rezervacii_obchodu AFTER INSERT OR UPDATE OR DELETE ON kupa_ovocia FOR EACH ROW EXECUTE PROCEDURE rezervuj_tovar_po_ponuke(); /* pridame tovar do obchodu */ INSERT INTO ovocie_na_predaj VALUES('JABLKO',500); INSERT INTO ovocie_na_predaj VALUES('MELON',500); /* kupec 1 */ INSERT INTO kupa_ovocia(meno_kupcu,druh_ovocia,mnozstvo_ovocia) VALUES('Rob','JABLKO',100); /* Update ponuky kupca */ UPDATE kupa_ovocia SET mnozstvo_ovocia = 100 WHERE id_kupcu = 1; /* kupec 2 */ INSERT INTO kupa_ovocia(meno_kupcu,druh_ovocia,mnozstvo_ovocia) VALUES('Ivan','JABLKO',400); /* vypis */ SELECT * FROM ovocie_na_predaj; SELECT * FROM kupa_ovocia;
run
|
edit
|
history
|
help
0
finaleHFEIZFIDSHI
Black Wall
as
book suggestion
prec
first
postgres group by by function
Inner Join
PostreSQL: product table
Tic tac toe