[firebase-br] Uma contribuição para os colegas: uma nova versão de rotina de validação de CPF e CNPJ
Francisco Carlos da Rocha Gomes
fcarlos em cpafac.embrapa.br
Seg Fev 8 15:09:12 -03 2010
Oi Samuel,
É que eu tenho bd antigo em firebird cujo front-end não validou os dados
de cpf gravados nele. Daí criei essa rotina para que, a partir de uma
select numa stored procedure que invoca essa rotina, eu pudesse
identificar quais CPFs foram inseridos errados.
Em suma, essa stored procedure de validação de cpf é boa para casos de
consulta de dados já gravados, identificando se há códigos inválidos.
Além disso, conforme a dica do link abaixo, é possível colocar a rotina
de validação numa trigger "before insert" evitando que um código
inválido seja inserido no bd.
http://www.firebase.com.br/fb/artigo.php?id=917
Exemplos:
/*
Store Procedure para consulta de verificacao de codigos gravados
*/
create procedure SP_VER_CPFCNPJ
returns (
nome varchar(50),
cpfcnpj varchar(20),
codigo_ok CHAR(1))
as
begin
for select nome, cpfcnpj
from pessoa
into :nome, :cpfcnpj
do begin
select cpfcnpj_ok
from cpfcnpj_ok(:cpfcnpj)
into :codigo_ok;
suspend;
end
end
/*
Trigger before insert que evita codigo invalido
*/
create trigger pessoa_valida_cpfcnpj for pessoa active before insert
position 0
as
declare variable codigo_ok char(1);
begin
if (cpfcnpj <> '') then
begin
execute procedure cpfcnpj_ok new.cpfcnpj
returning values codigo_ok;
if (codigo_ok = 'n') then
begin
exception exc_valida_CPF;
end
end
if (new.codpessoa is null) then
new.codpessoa = GEN_ID(GEN_codpessoa, 1);
end
Francisco Carlos,
Embrapa Acre
samuel ferreira wrote:
> ola
>
> primeiro, obrigado carlos pelo compartilhamento, mas so pra eu entender,
> qual a vantagem de fazer uma validacao no banco? Faco isso sempre na minha
> aplicacao. Gostaria de saber os porques.
>
> samuel
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
Mais detalhes sobre a lista de discussão lista