Você está na página 1de 3

Validao de CGC/CPF em SPs e Triggers no Firebird

Lembrando que estas funes so para o Firebird, sendo que para serem usadas em outros SGBD 's se
faz necessrio converte!as para suas !in"ua"ens correspondentes# $m outro deta!%e & que a!"umas
$DFs uti!izadas no c'di"o fazem parte das bib!iotecas de funes padro do Firebird (fbudf e
ib)udf*, que devem ser insta!adas na pasta $DF no diret'rio de insta!ao do Firebird#
Stored +rocedure para c!cu!o do ,G,#
CREATE PROCEDURE VALIDACGC (STR varchar(11))
returns(CGC CHAR(1) varive! "ue ser ret#rna$a)
AS
$ec!are varia%!e I inte&er'
$ec!are varia%!e ( inte&er'
$ec!are varia%!e ) inte&er'
$ec!are varia%!e * inte&er'
$ec!are varia%!e D1 inte&er'
$ec!are varia%!e D+ inte&er'
$ec!are varia%!e ,ATOR inte&er'
$ec!are varia%!e CALCULADO char(+)'
$ec!are varia%!e DIGITADO char(+)'
%e&in
-- Pre.ara/0# .ara c!cu!# $# D1
I1str!en(STR)' --ta2anh# $a strin&
)1I-+'
(11' ,ATOR1+' D113'
4hi!e ((51I-+)$#
%e&in
67
su%str!en(STR8)81)1.e&ar a .artir $a .#si/0# )8 1 caracter
cast(su%str!en(STR8)81)as inte&er)1 c#nverte .ara inteir#
76
D11D19cast(su%str!en(STR8)81)as inte&er)7,ATOR'
(1(91' )1)-1' ,ATOR1,ATOR91'
en$
D1111-(2#$(D1811))'
i: (D1;113) then D113'
--Pre.ara/0# .ara c!cu!# $# D+
(1<' D+13' *1I-+'
4hi!e ((51I)$#
%e&in
D+1D+9cast(su%str!en(STR8*81)as inte&er)7('
(1(91' *1*-1'
en$
D+1D+9D17+'
D+111-(2#$(D+811))'
i: (D+;113) then D+13'
--Pre.ara/0# .ara va!i$a/0# $# CGC
CALCULADO1cast(D1 as char)==cast(D+ as char)' --c#ncatenar #s D1 e D+
DIGITADO1su%str!en(STR81381)==su%str!en(STR81181)' --c#ncatenar # $i&> $# CP,
--C#2.arar #s $#is
i: (CALCULADO1DIGITADO) then CGC1?V?'
e!se CGC1?,?'
sus.en$'
en$
Stored +rocedure para c!cu!o do ,+F#
CREATE PROCEDURE VALIDACP, (STR varchar(11))
returns(CP, CHAR(1) varive! "ue ser ret#rna$a)
AS
$ec!are varia%!e I inte&er'
$ec!are varia%!e ( inte&er'
$ec!are varia%!e ) inte&er'
$ec!are varia%!e * inte&er'
$ec!are varia%!e D1 inte&er'
$ec!are varia%!e D+ inte&er'
$ec!are varia%!e ,ATOR inte&er'
$ec!are varia%!e CALCULADO char(+)'
$ec!are varia%!e DIGITADO char(+)'
%e&in
--Pre.ara/0# .ara c!cu!# $# D1
I1str!en(STR)' --ta2anh# $a strin&
)1I-+'
(11' ,ATOR1+' D113'
4hi!e ((51I-+)$#
%e&in
67
su%str!en(STR8)81)1.e&ar a .artir $a .#si/0# )8 1 caracter
cast(su%str!en(STR8)81)as inte&er)1 c#nverte .ara inteir#
76
D11D19cast(su%str!en(STR8)81)as inte&er)7,ATOR'
(1(91' )1)-1' ,ATOR1,ATOR91'
en$
D1111-(2#$(D1811))'
i: (D1;113) then D113'
--Pre.ara/0# .ara c!cu!# $# D+
(1<' D+13' *1I-+'
4hi!e ((51I)$#
%e&in
D+1D+9cast(su%str!en(STR8*81)as inte&er)7('
(1(91' *1*-1'
en$
D+1D+9D17+'
D+111-(2#$(D+811))'
i: (D+;113) then D+13'
--Pre.ara/0# .ara va!i$a/0# $# CP,
CALCULADO1cast(D1 as char)==cast(D+ as char)' --c#ncatenar #s D1 e D+
DIGITADO1su%str!en(STR81381)==su%str!en(STR81181)' --c#ncatenar # $i&> $# CP,
--C#2.arar #s $#is
i: (CALCULADO1DIGITADO) then CP,1?V?'
e!se CP,1?,?'
sus.en$'
en$

Como chamar uma stored procedure de dentro de um trigger
Lo"o abai-o ser mostrado como c%amar uma S+ de dentro de um tri""er e-ecutado antes de um insert,
.unto a criao do "ati!%o de autonumerao de um campo, e depois em um tri""er e-ecutado antes de
um update#
CREATE TRIGGER PESSOA@,ISICA@(URIDICA@VALCP,@I ,OR PESSOA@,ISICA@(URIDICA
ACTIVE AE,ORE IBSERT POSITIOB 3
AS
DECLARE VARIAALE V@CP, CHAR(1)'
AEGIB
I, (BEC>CP, 5;??) THEB se # ca2.# $e va!i$a/0# :#r $i:erente $e vaDi#
AEGIB
E)ECUTE PROCEDURE VALIDACP, BEC>CP, --cha2a a SP VALIDACP, .assan$# # va!#r
--$# ca2.# CP,>
RETURBIBG@VALUES V@CP,' --varive! "ue ser ret#rna$a $a SP
I, (V@CP, 1 ?,?)THEB
AEGIB
E)CEPTIOB E)C@VALIDA@CP,' --eEce/0# causa$a cas# # CP, esteFa inc#rret# 77
EBD
EBD
--c#nstru/a# $# &ati!h# $e aut#nu2era/0#777
I, (BEC>BRO@PESSOA IS BULL) THEB
BEC>BRO@PESSOA 1 GEB@ID(GEB@PESSOA@,ISICA@(URIDICA@ID81)'
EBD

// 0 e-ceo anterior deve ser criada previamente com o se"uinte comando1
Create exception EXC_VALIDA_CPF CPF est incorreto ou invlido, preenchao
correta!ente ou deixe o e! "ranco #$%
/// !embrese de criar o "enerator com o se"uinte comando
C&EA'E (E)E&A'*& (E)_PE++*A_FI+ICA_,-&IDICA_ID%
+E' (E)E&A'*& (E)_PE++*A_FI+ICA_,-&IDICA_ID '* .%

Você também pode gostar