<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Forum PostgreSQL - procedury i triggery]]></title>
		<link>https://forum.postgresql.org.pl/viewtopic.php?id=539</link>
		<description><![CDATA[Najświeższe odpowiedzi w procedury i triggery.]]></description>
		<lastBuildDate>Wed, 02 Feb 2011 19:34:39 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Odp: procedury i triggery]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=2382#p2382</link>
			<description><![CDATA[Jesteś pewien że ta funkcja, którą nam pokazujesz jest wywoływana prze triggera?
Takiwego update  w tej funkcji nie ma
[code]
UPDATE towary SET towary.iloscWmagazynie = towary.iloscWmagazynie - fakt
ura.ilosc
[/code]
Po pierwsze nie jest dobrze jak przy tworzeniu tabel i nazywaniu kolumn uzywasz " ", bo w postgresie
"iloscWmagazynie" to nie to samo co iloscWmagazynie. Więc proponowałnym zmienic nazwy wszystkich kolumn na pisane bez " ".
Druga sprawa, UPDATE w procedurze korzysta z dwóch tabel towary i faktura nie jestem pewien czy to dobrze tu zadziala. Czy nie bedzie potrzebny jakis zagniezdzony select.]]></description>
			<author><![CDATA[dummy@example.com (rski)]]></author>
			<pubDate>Wed, 02 Feb 2011 19:34:39 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=2382#p2382</guid>
		</item>
		<item>
			<title><![CDATA[procedury i triggery]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=2381#p2381</link>
			<description><![CDATA[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ść.]]></description>
			<author><![CDATA[dummy@example.com (nowicjuszz)]]></author>
			<pubDate>Tue, 01 Feb 2011 22:16:03 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=2381#p2381</guid>
		</item>
	</channel>
</rss>
