On 06-02-2015 15:38, Fábio Telles Rodriguez wrote:
> Em 6 de fevereiro de 2015 14:07, Danilo Silva <[email protected]>
> escreveu:
> 
>> Pessoal,
>>
>> Tenho a seguinte função:
>> CREATE OR REPLACE FUNCTION f_baixa_manifesto() RETURNS text AS
>> $$
>> DECLARE
>> variaveis...
>> BEGIN
>> FOR ... LOOP
>> /* iniciar transação */
>> FOR ... LOOP
>> instruções de inserts e updates... */
>> END LOOP;
>> /* fim da transação, executando um commit ou rollback */
>> END LOOP;
>> RETURN ...;
>> END;
>> $$
>> LANGUAGE plpgsql;
>>
>> Como posso inciar uma transação dentro de um loop? Sendo que ao final do
>> loop irei executar um commit ou rollback. Tentei utilizar um "begin work"
>> mas deu erro de sintaxe.
>>
>>
> Não pode. O que você pode é criar um bloco de EXEPTION para tratar um
> bloco. Mas COMMIT e ROLLBACK nunca. Esta é uma limitação conhecida do
> Postgres, não vejo acho que isso deve mudar no futuro.
> 

Danilo,

Creio que o que vc quer é o que o Oracle implementa com o nome de
"Autonomous Transaction" [1].

Infelizmente o PostgreSQL ainda não implementa tal feature, mas vc pode
emular isso utilizando dblink [2]. Nos links [3] e [4] vc encontra
alguns exemplos.

Att,

[1]
http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/autonotransaction_pragma.htm
[2] http://www.postgresql.org/docs/current/interactive/dblink.html
[3]
http://raghavt.blogspot.com.br/2012/05/autonomous-transaction-in-postgresql-91.html
[4] https://github.com/henkbl/plog

-- 
   Fabrízio de Royes Mello         Timbira - http://www.timbira.com.br/
   PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a