RE: RES: [firebase-br] "Semáforo" no Firebird

Rodrigo Pires digaoblues em hotmail.com
Qui Jul 19 17:57:35 -03 2007


Existe um meio de iniciar uma nova transação via
PL/SQL ???

qual comnente de conexao vc usa???

eu tenho uma situacao parecida com a tua.. uso zeos, e na hora do select 
with lock
abro uma transacao explicita e do um commit só depois de comfirmar os dados.

Outra dúvida: Com a cláusula WHEN DO eu consigo tratar exceções sem que elas
interrompam a execução de minha procedure e consequentemente disparem um
rollback ?

deve ter um jeito de capturar o codigo de erro pra deadlock e tratar isso 
dentro da
procedure.. só nao sei como :D

[]s



>From: "Rodrigo A. de Freitas" <rodrigo em solucoeseinformatica.com.br>
>Reply-To: FireBase <lista em firebase.com.br>
>To: "'FireBase'" <lista em firebase.com.br>
>Subject: RES: [firebase-br] "Semáforo" no Firebird
>Date: Thu, 19 Jul 2007 17:51:19 -0300
>
>Pessoal, esses campos NÃO SÃO a chave primária da tabela. Pra entender, tem
>que entender um pouco o processo contábil:
>
>Um único lançamento contábil é composto de "N" partidas a débito e "N"
>contrapartidas à crédito:
>
>Lançamento 456 / 2007 - 1000,00 R$:
>
>Partida (débito)                          Contrapartida (Crédito)
>-----------------------                   -----------------------------
>343 - Manutenção de veículos: 200 R$      123 - Duplicatas a pagar: 910 R$
>234 - Manutenção predial:     300 R$      132 - ISS                  30 R$
>143 - Manutenção geral:       500 R$      125 - PIS                  60 R$
>------------------------------------      --------------------------------
>Total à débito:              1000 R$      Total à crédito:         1000 R$
>
>Ou seja, no exemplo acima, um único lançamento contábil é composto na
>verdade por 6 lançamentos e é esse o problema. Por conta de uma modelagem
>mal-feita (um levantamendo de dados mal-feito, dado que originalmente o
>sistema permitia apenas uma única partida e contra-partida), eu só tenho 
>uma
>tabela no sistema, chamada CAD_LANCAMENTO (cuja chave primária é um campo
>INTEGER, incrementado por generator), que recebe os lançamentos contábeis;
>Assim, o número do lançamento (o 456 / 2007) é replicado para todas as
>linhas da tabela que o compõem.
>
>Por isso não posso controlar numa trigger. A essa altura e na complexidade
>que se encontra o sistema, não dá pra alterar toda a modelagem da parte
>contábil; O melhor jeito que eu consegui pensar é criar uma tabela de
>semáforo.
>
>Quando ao comentário do Rodrigo Pires, que o SELECT...WITH LOCK só trava
>para outro SELECT...WITH LOCK, não teria problemas, já que eu criaria uma
>stored procedure que se encarregaria de retornar os números de lançamento. 
>O
>problema é que eu não posso commitar logo após receber o número, já que eu
>tenho determinadas rotinas no sistema que geram mais de um lançamento
>contábil de uma vez só. Existe um meio de iniciar uma nova transação via
>PL/SQL ???
>
>Outra dúvida: Com a cláusula WHEN DO eu consigo tratar exceções sem que 
>elas
>interrompam a execução de minha procedure e consequentemente disparem um
>rollback ?
>
>[]'s
>
>
>Rodrigo A. de Freitas
>Análise & Desenvolvimento
>
>Soluções & Informática
>
>-----Mensagem original-----
>De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
>nome de Forrest®
>Enviada em: quinta-feira, 19 de julho de 2007 17:12
>Para: lista em firebase.com.br
>Assunto: Re: [firebase-br] "Semáforo" no Firebird
>
>Samuel Duarte Matos wrote:
>
> > Cara, não sei se não entendi o seu problema, mas será que se vc fazer
> > este select da chave primária em uma trigger (before insert) não
> > resolveria o seu problema?
>---
>
>Pelo que eu entendi do que ele relatou também eu iria propor usar
>triggers também que resolveria o problema.
>
>T+++++++++++++++
>
>--
>
>
>
>______________________________________________
>FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>Para editar sua configuração na lista, use o endereço
>http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
>
>--
>No virus found in this incoming message.
>Checked by AVG Free Edition.
>Version: 7.5.476 / Virus Database: 269.10.9/907 - Release Date: 18/7/2007
>15:30
>
>
>
>______________________________________________
>FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>Para editar sua configuração na lista, use o endereço 
>http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>Para consultar mensagens antigas: http://firebase.com.br/pesquisa

_________________________________________________________________
Verificador de Segurança do Windows Live OneCare: combata já vírus e outras 
ameaças! http://onecare.live.com/site/pt-br/default.htm





Mais detalhes sobre a lista de discussão lista