<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Forum PostgreSQL - Funkcje składowane + transakcje zagnieżdżone]]></title>
		<link>https://forum.postgresql.org.pl/viewtopic.php?id=266</link>
		<description><![CDATA[Najświeższe odpowiedzi w Funkcje składowane + transakcje zagnieżdżone.]]></description>
		<lastBuildDate>Fri, 07 Aug 2009 19:45:39 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Funkcje składowane + transakcje zagnieżdżone]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=1135#p1135</link>
			<description><![CDATA[Czy ktoś może wie o jakimś sposobie zagnieżdżania transakcji w procedurach składowanych w PG 8.4??
Potrzebuję stworzyć następującą procedurkę:

CREATE OR REPLACE my_func(parametry)
AS
  BEGIN
    [i]sprawdź dane wejściowe[/i]
    [i]jeśli są niepoprawne to wyrzuć wyjątek[/i]
    [i]w przeciwnym razie zapisz dane wejściowe[/i]
  EXCEPTION
    [i]zapisz dane audytowe[/i]
    [i]wyrzuć wyjątek do aplikacji nadrzędnej[/i]
  END;


Problem jest z obsługą wyjątków. Generalnie wywołanie funkcji składowanej jest pojedynczą transakcją i każde rzucenie wyjątkiem rollbackuje tą transakcję - czyli wszystkie zmiany wyparowują. Nawet jeśli robię zapis danych audytowych (są niezbędne) w obsłudze wyjątku, a potem wyrzucam wyjątek dalej do aplikacji nadrzędnej, to niestety i tak wszystko jest wycofane. Podobno PG 8.4  ma zagnieżdżone transakcje, ale zdaje się, że nie w procedurach składowanych. 
Może ktoś zna jakieś obejście? Tak żeby zapis danych audytowych odbył się w oddzielnej transakcji (albo inny sposób, byle nie został zrollbackowny).]]></description>
			<author><![CDATA[dummy@example.com (Pigmej)]]></author>
			<pubDate>Fri, 07 Aug 2009 19:45:39 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=1135#p1135</guid>
		</item>
	</channel>
</rss>
