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
|
| Список | 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 по дате отправления: