Temat: sumowanie kolumny
Chcę postawić warunek liczby max. w kolumnie.
BEGIN
if ( new.a ==20) then
return new;
else
return old;
end if;
return null;
end;
PostgreSQL to najbardziej zaawansowany system relacyjnych baz danych Open Source.
Nie jesteś zalogowany. Proszę się zalogować lub zarejestrować.
Strony 1
Zaloguj się lub zarejestruj by napisać odpowiedź
Chcę postawić warunek liczby max. w kolumnie.
BEGIN
if ( new.a ==20) then
return new;
else
return old;
end if;
return null;
end;
Czy na pewno dobrze Cię rozumiem chcesz by przy update trigger sprawdzał, że użytkownik wprowadza wartość 20 i tylko na tą wartość ma pozwalać bo w przeciwnym przypadku ma zwracać wartość poprzednią (do tego dla wartości null w polu "a" trigger ma nic nie robić)?
Jeśli chciałeś zrobić to tak że pole "a" nie może przyjmować wartości > niż 20 wystarczy zmodyfikować pole tabeli - skrypt tworzący przykładową tabelę
CREATE TABLE public.tabelka
( id serial primary key
,a integer NOT NULL CHECK (a<=20)
)
WITH (OIDS = FALSE);
Proszę (bez obsługi błędów i tylko jako przykład lub dla bardzo małej bazy danych)
CREATE TABLE public.tabelka
( id serial primary key
,a int
,b int
)
WITH (OIDS = FALSE);
CREATE or replace FUNCTION f_tabelka_tr() RETURNS trigger AS
$BODY$begin
if tg_op='INSERT' then
if coalesce((select sum(a) from public.tabelka)+new.a,new.a,0) <=20 then
return new;
else
return old;
end if;
else
if coalesce((select sum(a) from public.tabelka)+new.a-coalesce(old.a,0),new.a,0) <=20 then
return new;
else
return old;
end if;
end if;
return null;
end;$BODY$
LANGUAGE plpgsql VOLATILE NOT LEAKPROOF;
CREATE TRIGGER tr_tabelka BEFORE INSERT OR UPDATE ON tabelka FOR EACH ROW EXECUTE PROCEDURE public.f_tabelka_tr();
Poprawiłem jeszcze jeden błąd
Ostatnio edytowany przez c_michal (2013-11-11 23:09:43)
Posty [ 5 ]
Strony 1
Zaloguj się lub zarejestruj by napisać odpowiedź
[ Wygenerowano w 0.007 sekund, wykonano 7 zapytań ]