Re: [pgbr-geral] Iniciar transação dentro de função

2015-02-06 Por tôpico Fabrízio de Royes Mello
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

2015-02-06 Por tôpico Fábio Telles Rodriguez
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

2015-02-06 Por tôpico Danilo Silva
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