<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Forum PostgreSQL - Funkcje składowane + transakcje zagnieżdżone]]></title>
	<link rel="self" href="http://forum.postgresql.org.pl/extern.php?action=feed&amp;tid=266&amp;type=atom"/>
	<updated>2009-08-07T19:45:39Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.postgresql.org.pl/viewtopic.php?id=266</id>
		<entry>
			<title type="html"><![CDATA[Funkcje składowane + transakcje zagnieżdżone]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=1135#p1135"/>
			<content type="html"><![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).]]></content>
			<author>
				<name><![CDATA[Pigmej]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=878</uri>
			</author>
			<updated>2009-08-07T19:45:39Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=1135#p1135</id>
		</entry>
</feed>
