1

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;

2

Odp: sumowanie kolumny

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);

3

Odp: sumowanie kolumny

4

Odp: sumowanie kolumny

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)

5

Odp: sumowanie kolumny