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
