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