[firebase-br] Stored Procedure

Sérgio Luiz Krüger sergio.luiz.kruger em gmail.com
Sex Jul 20 20:09:26 -03 2007


    Boa noite,

    Obrigado pela ajuda, mas como voce controla na procedure update o caso 
de duas estações estarem alterando o mesmo registro ? Se eu fizer uma 
procedure update simples atualizando todos os campos que foram 
acessados/alterados por uma estação, corro o risco de perder dados que foram 
alterados em outra estação. É feito algum lock quando o usuário começa a 
alterar o registro na tela ? Ou vc passa os valores antigos e novos para a 
stored procedure gerar um comando update apenas do que foi alterado pelo 
usuário ?

    O que eu estou querendo fazer é criar uma "camada" de procedimentos no 
banco de dados pra fazer manutenção em suas tabelas, tirando o máximo 
possível a dependência de componentes e evitando assim de ter que ficar 
escrevendo SQL dentro da aplicação. Fazendo dessa forma, acredito que a 
aplicação poderia ser feita em Delphi, .Net, Java, etc, desde que a 
linguagem suporte execução de stored procedures e ficando dessa forma, 
padronizado o acesso aos dados. O problema é que eu não sei qual o padrão 
que o pessoal utiliza, e tenho medo de começar a escrever código e no meio 
do projeto, ter que alterar tudo.

    Já pesquisei na net e existem casos onde os programadores efetuam um 
select for update quando entram em modo de alteração do registro nas 
estações, mantendo o registro "lockado" durante a fase de edição, evitando 
assim o problema de duas pessoas alterando o mesmo registro, porém não sei 
se essa é uma boa idéia.

    Também encontrei casos onde é criada uma coluna timestamp na tabela que 
é alimentada via trigger e na stored procedure update essa coluna é checada 
na
cláusula where a fim de saber se o registro foi editado por outra estação 
enquanto voce estava alterando-o, fazendo com que o update falhe e o usuário 
seja obrigado a reiniciar a transação.

    Sei que devem existir outras formas de se fazer isso, mas eu gostaria de 
saber quais são as melhores práticas, seus pontos a favor e contra pra poder 
adotar uma delas e tocar o projeto.

    Acredito que a maioria aqui usa Delphi pra acessar o Firebird. Será que 
todo mundo usa escrever SQL dentro de componentes ? Essa é realmente a 
melhor prática ? Se quiserem passar pra Java ou mesmo trocar de banco de 
dados, reescrevem todo o SQL dentro de componentes de novo ?

    Desculpe-me pelo longo e-mail, mas é que trabalho atualmente com Visual 
Dataflex, e estou tentando converter minhas aplicações para banco de dados, 
e já estou cançado de ficar dependente de uma linguagem ou banco, por isso, 
procuro uma forma de fazer com que as coisas fiquem mais portáveis e 
independentes uma da outra.

    Abraços.

    Sérgio Luiz Krüger


----- Original Message ----- 
From: "paulosxs Yahoo!" <paulosxs em yahoo.com.br>
To: <lista em firebase.com.br>
Sent: Friday, July 20, 2007 7:05 PM
Subject: Re: [firebase-br] Stored Procedure


Em meus aplicativos adotei como padrão a interface com o BD sempre
através de procedures. No caso dos componentes que utilizo, a transação
é controlada automaticamente durante a execução da procedure. Quando se
trata de uma procedure com um comando simples, os locks são gerenciados
internamente pelo Fb. Pode ocorrer algum problema no caso de procedures
complexas, que envolvam atualizações em várias tabelas, mas mesmo nesses
casos nunca precisei me procupar com os locks.

> Date: Fri, 20 Jul 2007 09:54:17 -0300
> From: Sérgio Luiz Krüger <sergio.luiz.kruger em gmail.com>
> Subject: [firebase-br] Stored Procedure
> To: "FireBase" <lista em firebase.com.br>
> Message-ID: <004201c7cacd$1879cb50$3200a8c0 em SERGIO>
> Content-Type: text/plain; charset="iso-8859-1"
>
>     Bom dia,
>
>     Algúem da lista utiliza stored procedures para fazer 
> insert/update/delete ?
>
>     Como funciona no caso do update ? É utilizada alguma forma de lock de 
> registro antes de executar a stored procedure update ou a lógica de 
> tratamento multi-usuários é tratada dentro da própria stored procedure ?
>
>     Alguém poderia comentar as suas experiências ou ajudar com algum 
> exemplo ?
>
>     Obrigado.
>
>     Sérgio Luiz Kruger


______________________________________________
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 





Mais detalhes sobre a lista de discussão lista