Re: [pgbr-geral] Iniciar transação dentro de função
On 06-02-2015 15:38, Fábio Telles Rodriguez wrote: Em 6 de fevereiro de 2015 14:07, Danilo Silva danilo.dsg.go...@gmail.com 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 pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Iniciar transação dentro de função
Em 6 de fevereiro de 2015 14:07, Danilo Silva danilo.dsg.go...@gmail.com 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. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Iniciar transação dentro de função
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. []s Danilo ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral