Обсуждение: use SAVEPOINT function

Поиск
Список
Период
Сортировка

use SAVEPOINT function

От
Ying Lu
Дата:
Greetings,

I'd like to know is it possible to use "SAVEPOINT" in a function? In the
following example, I got an error when calling this function:

CREATE OR REPLACE function test() returns trigger as $test$
BEGIN
    SAVEPOINT savepoint1;
   ... ...
    COMMIT;
    RETURN NEW;

EXCEPTION
    when RAISE_EXCEPTION THEN
    ROLLBACK TO SAVEPOINT savepoint1;

END;
$test$ language plpgsql;

Thanks a lot,
Emi

Re: use SAVEPOINT function

От
Ying Lu
Дата:
The error msg is:

SPI_execute_plan failed executing query "SAVEPOINT savepoint1":
SPI_ERROR_TRANSACTION

>
> I'd like to know is it possible to use "SAVEPOINT" in a function? In
> the following example, I got an error when calling this function:
>
> CREATE OR REPLACE function test() returns trigger as $test$
> BEGIN
>    SAVEPOINT savepoint1;
>   ... ...
>    COMMIT;
>    RETURN NEW;
>   EXCEPTION
>    when RAISE_EXCEPTION THEN
>    ROLLBACK TO SAVEPOINT savepoint1;
> END;
> $test$ language plpgsql;
>
> Thanks a lot,
> Emi
>


Re: use SAVEPOINT function

От
Alvaro Herrera
Дата:
On Thu, Apr 14, 2005 at 04:10:18PM -0400, Ying Lu wrote:

> I'd like to know is it possible to use "SAVEPOINT" in a function? In the
> following example, I got an error when calling this function:

No; exceptions in plpgsql are implemented internally using savepoints,
so the function will automatically roll back the whole "begin ... end"
block (remember you can nest blocks if needed.)

--
Alvaro Herrera (<alvherre[@]dcc.uchile.cl>)
"Java is clearly an example of a money oriented programming"  (A. Stepanov)