Temat: procedury i triggery
Witam. Mam taki problem. Stworzyłem funkcję, która ma zmniejszać stan magazynu gdy jakiś towar zostanie zamówiony:
CREATE OR REPLACE FUNCTION zabierz()
RETURNS trigger AS
$BODY$
BEGIN
UPDATE towary SET towary.stan = towary.stan - faktura.ilosc
WHERE towary.id_towaru = faktura.id_towaru;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION zabierz() OWNER TO postgres;
CREATE TRIGGER zabierzzmagazynu
AFTER INSERT
ON faktura
FOR EACH STATEMENT
EXECUTE PROCEDURE zabierz();
CREATE TABLE faktura
(
id_faktury integer NOT NULL,
data_wystawienia date,
nazwa_towaru character varying(20),
ilosc integer,
jm character varying(5),
cena_netto money,
vat integer,
id_naglowek integer,
id_towaru integer,
CONSTRAINT faktura_pkey PRIMARY KEY (id_faktury)
)
CREATE TABLE towary
(
id_towaru integer NOT NULL,
nazwa_towaru character varying(20),
"iloscWmagazynie" integer,
jm character varying(5),
cena_netto money,
vat integer,
stan integer,
CONSTRAINT towary_pkey PRIMARY KEY (id_towaru)
)
Gdy dodaję towar do faktury wyskakuje mi błąd:
insert into faktura (id_faktury, data_wystawienia, nazwa_towaru, ilosc,
jm, cena_netto, vat, id_naglowek, id_towaru) values ('3', '20101112','Pioro','20
','szt.','3,5','23','1','9');
ERROR: column towary.iloscwmagazynie does not exist
LINE 1: UPDATE towary SET towary.iloscWmagazynie = towary.iloscWmaga...
^
QUERY: UPDATE towary SET towary.iloscWmagazynie = towary.iloscWmagazynie - fakt
ura.ilosc
WHERE towary.id_towaru = faktura.id_towaru
CONTEXT: PL/pgSQL function "zabierz" line 4 at SQL statement
Czy nie można stosowac tutaj aliasów? Nie wiem jak sobie z tym poradzić. Czy ktoś mógłby mnie jakoś naprowadzić w jaki sposób zdjąć towar ze stanu magazynu? Dopiero zaczynam zabawę z bazami. Proszę o wyrozumiałość.