[firebase-br] Procedure que Verifica se Existe o Registro na Tabela - Duvidas de Iniciante
Almir Fiorio
almir74 em gmx.net
Seg Jul 18 22:22:57 -03 2005
*Ok
Obrigado Amigo Eduardo :)
Sabe aopnde acho varios e bons exemplos de triggerse procedures?
algum bom livro sobre o assunto?
Grato
Almir*
Eduardo Resek escreveu:
> Almir Fiorio wrote:
>
>> Amigos
>>
>> Resolvi! Consegui com a juda do amigo Rafael Cabral
>>
>> A minha procedure ela exclui o produto da tabela
>> e se nao existir o produto ele mostra uma exception!!
>>
>> ele me ajudou usando o count, mas gostaria de saber se tem soucao
>> mais simples
>>
>> ficou assim , exemplo :
>>
>> CREATE PROCEDURE proc_del
>> (ID INTEGER)
>> AS
>> DECLARE VARIABLE QUANT INTEGER;
>> BEGIN
>> SELECT COUNT(ID) FROM TABELA WHERE ID = :ID INTO :QUANT
>> IF (QUANT = 0) THEN
>> EXCEPTION <NOME DA EXCEPTION>
>> ELSE
>> DELETE FROM TABELA WHERE ID = :ID
>>
>> ------------------------------------------------------------------------
>>
>> ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.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
>>
> SELECT COUNT não é uma boa idéia, pois o firebird vai varre todos
> os registros para efetuar a contagem. No seu caso basta verificar se
> existe UM registro, o que pode ser feito assim:
>
> CREATE PROCEDURE proc_del
> (ID INTEGER)
> AS
> BEGIN
> IF (EXISTS (SELECT 1 FROM TABELA WHERE ID= :ID )) THEN
> DELETE FROM TABELA WHERE ID = :ID ;
> ELSE
> EXCEPTION <NOME DA EXCEPTION> ;
> END
>
> A diferença é que, desse modo, ao encontrar o primeiro registro que
> satisfaz à condição (e que deve ser o único, pois ID é chave primária,
> correto?), a busca já é encerrada e a próxima instrução é executada.
> Com o count, mesmo depois de encontrado o registro com a ID
> pretendida, a busca continua até que todos os registros da tabela
> tenham sido verificados. Numa tabela muito populada, isto pode fazer
> uma diferença considerável.
>
> Eduardo Resek
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.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