Обсуждение: Help with BEGIN/COMMIT within a transaction

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

Help with BEGIN/COMMIT within a transaction

От
Bhavesh Jardosh
Дата:
I aplogoize in the first place, if this is a silly question. But as silly as it
sounds it has been giving me a hard time.

I need to use BEGIN/COMMIT within a stored procedure and almost all the syntax
(e.g. BEGIN ... COMMIT, START ... COMMIT, BEGIN WORK ... COMMIT WORK etc.)
gives me an error when I try to execute (not when I compile) the stored
procedure.

Attached is the script to reproduce the problem.

Is there a compile time option or a server setting that I need to enable ?

It does COMMIT when it exits from the stored procedure, but thats not I want. I
want to commit from within a cursor loop so that the changes are visible in
other sessions as soon as they are done.


=== create table script ==
create table employee
(
 id integer,
 name text
);


=== stored procedure =====

CREATE OR REPLACE FUNCTION sp_test() RETURNS TEXT AS '
BEGIN

    START
    INSERT INTO employee (id, name) values (1, ''postgres'');
    COMMIT;

    return ''OK'';


END;

' LANGUAGE plpgsql;


=== invoking the stored procedure thru psql ===

test=# select sp_test() as status;
WARNING:  plpgsql: ERROR during compile of sp_test near line 3
ERROR:  parse error at or near ";"
test=#


__________________________________
Do you Yahoo!?
The New Yahoo! Search - Faster. Easier. Bingo.
http://search.yahoo.com

Re: Help with BEGIN/COMMIT within a transaction

От
Doug McNaught
Дата:
Bhavesh Jardosh <perltastic@yahoo.com> writes:

> I aplogoize in the first place, if this is a silly question. But as silly as it
> sounds it has been giving me a hard time.
>
> I need to use BEGIN/COMMIT within a stored procedure and almost all the syntax
> (e.g. BEGIN ... COMMIT, START ... COMMIT, BEGIN WORK ... COMMIT WORK etc.)
> gives me an error when I try to execute (not when I compile) the stored
> procedure.

You can't currently do this.  Calls to functions are already inside a
(possibly implicit) transaction, so calling BEGIN inside a function
would have to start a subtransaction, which PG doesn't currently
support.  There is some possibility that this feature will be in 7.5,
but that won't be coming out anmytime soon.

-Doug

Re: Help with BEGIN/COMMIT within a transaction

От
Manfred Koizar
Дата:
On 02 Aug 2003 09:42:05 -0400, Doug McNaught <doug@mcnaught.org>
wrote:
>Bhavesh Jardosh <perltastic@yahoo.com> writes:
>> I need to use BEGIN/COMMIT within a stored procedure [...]
>
>You can't currently do this.  Calls to functions are already inside a
>(possibly implicit) transaction, so calling BEGIN inside a function
>would have to start a subtransaction, which PG doesn't currently
>support.  There is some possibility that this feature will be in 7.5,
>but that won't be coming out anmytime soon.

Subtransactions won't help, because the OP wants

>[...] to commit from within a cursor loop so that the changes are visible in
>other sessions as soon as they are done.

Changes will not be visible to other sessions until the *main*
transaction commits.

Servus
 Manfred