Re: PL/PgSQL: EXIT USING ROLLBACK

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: PL/PgSQL: EXIT USING ROLLBACK
Дата
Msg-id 32224.1406398940@sss.pgh.pa.us
обсуждение исходный текст
Ответ на PL/PgSQL: EXIT USING ROLLBACK  (Marko Tiikkaja <marko@joh.to>)
Ответы Re: PL/PgSQL: EXIT USING ROLLBACK  (Marko Tiikkaja <marko@joh.to>)
Список pgsql-hackers
Marko Tiikkaja <marko@joh.to> writes:
> Hello,
> Today I'd like to present a way to get rid of code like this:

>    $$
>    BEGIN

>    BEGIN
>      INSERT INTO foo VALUES (1);
>      -- run some tests/checks/whatever
>      RAISE EXCEPTION 'OK';
>    EXCEPTION WHEN raise_exception THEN
>      IF SQLERRM <> 'OK' THEN
>        RAISE;
>      END IF;
>    END;

>    RETURN 'success';
>    END
>    $$

> And replace it with code like this:

>    $$
>    BEGIN

>    <<testsomething>>
>    BEGIN
>      INSERT INTO foo VALUES (1);
>      -- run some tests/checks/whatever
>      EXIT USING ROLLBACK testsomething;
>    EXCEPTION WHEN others THEN
>      RAISE;
>    END;

>    RETURN 'success';
>    END
>    $$

Somehow I'm failing to see that as much of an improvement;
in fact, it's probably less clear than before.  I don't much
care for the idea that EXIT should take on some transaction-control
properties instead of being a simple transfer of control.
In particular, what happens if someone attaches USING ROLLBACK
to an EXIT that does not lead from inside to outside a BEGIN/EXCEPTION
block?
        regards, tom lane



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Andres Freund
Дата:
Сообщение: Re: building pdfs
Следующее
От: Marko Tiikkaja
Дата:
Сообщение: Re: PL/PgSQL: EXIT USING ROLLBACK