<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Forum PostgreSQL - sumowanie kolumny]]></title>
		<link>https://forum.postgresql.org.pl/viewtopic.php?id=1900</link>
		<description><![CDATA[Najświeższe odpowiedzi w sumowanie kolumny.]]></description>
		<lastBuildDate>Sat, 09 Nov 2013 09:03:48 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Odp: sumowanie kolumny]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4800#p4800</link>
			<description><![CDATA[[quote=c_michal]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) <=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();[/quote]
////////////////////////////////////////////////////////////////

SUPER DZIĘKI !!
Jesteś mistrzem.
Zapraszam  [url]http://facebook.com/jacek.fleszar[/url]]]></description>
			<author><![CDATA[dummy@example.com (fleszar)]]></author>
			<pubDate>Sat, 09 Nov 2013 09:03:48 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4800#p4800</guid>
		</item>
		<item>
			<title><![CDATA[Odp: sumowanie kolumny]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4798#p4798</link>
			<description><![CDATA[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]]></description>
			<author><![CDATA[dummy@example.com (c_michal)]]></author>
			<pubDate>Fri, 08 Nov 2013 14:49:52 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4798#p4798</guid>
		</item>
		<item>
			<title><![CDATA[Odp: sumowanie kolumny]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4797#p4797</link>
			<description><![CDATA[[quote=c_michal]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);[/quote]
----------------------------------------------------
dzięki,ale chodzi raczej o to by suma kolumny (a) nie przekroczyła 20;
tabelka prosta :
a int,
b int;


BEGIN

if ( new.a <=20)  then
return new;
else
return old;
end if;
return null;
end;]]></description>
			<author><![CDATA[dummy@example.com (fleszar)]]></author>
			<pubDate>Fri, 08 Nov 2013 14:06:17 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4797#p4797</guid>
		</item>
		<item>
			<title><![CDATA[Odp: sumowanie kolumny]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4780#p4780</link>
			<description><![CDATA[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);]]></description>
			<author><![CDATA[dummy@example.com (c_michal)]]></author>
			<pubDate>Fri, 25 Oct 2013 12:58:41 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4780#p4780</guid>
		</item>
		<item>
			<title><![CDATA[sumowanie kolumny]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4778#p4778</link>
			<description><![CDATA[Chcę postawić warunek liczby max. w kolumnie.


BEGIN


 if ( new.a ==20)  then
return new;
else
return old;
end if;
return null;
end;]]></description>
			<author><![CDATA[dummy@example.com (fleszar)]]></author>
			<pubDate>Fri, 25 Oct 2013 12:17:46 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4778#p4778</guid>
		</item>
	</channel>
</rss>
