[firebase-br] Exception
Gladiston Santana
gladiston em vidy.com.br
Sex Ago 1 10:09:14 -03 2014
Ricardo, pensei com calma.
E acho que voce não precisa dum when..do, o que voce precisa para resolver
seu problema é um debugger para depurar.
Talvez o Carlos possa te informar sobre gerenciadores com essa capacidade,
mas desconheço algum que possa depurar triggers, mas certamente há um que
pode monitorar os statments que vão para o servidor.
Sem pretenção nenhuma, mas sugeriria que melhorasse a metodologia para suas
triggers porque francamente ela tá complexa e com execute statments? o erro
pode estar disfarçado entre as concatenações, talvez voce possa manter o
esqueleto do sql e usando apenas parametros seria mais facil de depurar.
Criar uma trigger com certo grau de complexidade é como ter um filho de 7
anos e evitar que ele se coloque em perigo a todo instante.
Um cuidado ao criar triggers é não deixa-las longas demais, se elas se
tornam longas é melhor faze-las com que disparem uma procedure, esta sim,
mais fácil de depurar e até o IBExpert faz debug passo-a-passo(F8) se
precisar.
Também quando a trigger fica complexa é preciso adicionar um controle para
evitar nearest triggers, isto é, chamadas recursivas tendo como ponto de
origem a própria trigger ou as vezes cuidar de que uma trigger não dispare
a outra acidentalmente.
Quando fazer manutenção na base, lembrar de desligar as triggers para
evitar o disparo automático acidental.
Por isso, uso triggers apenas para validações e codigos simples, quando se
tornam complexas, elas dificultam a manutenção.
Vou lhe dizer com o uso de domains, validar valores via triggers é quase
inutil.
inte+
Em 31 de julho de 2014 16:22, Gladiston Santana <gladiston em vidy.com.br>
escreveu:
> Ricardo, em blocos de codigo basta fazer o que eu disse e acrescentar o
> when any:
> create procedure sp_teste (
> A smallint,
> B smallint )
> RETURNS (
> C smallint )
> AS
> begin
> -- a=smallint, b=smallint, c=(a+b) mas tambem smallint, se o resultado
> -- for maior que >32768 dará erro porque c não está capacitado para
> armazenar
> -- este tipode resultado
> -- Crie uma exception generica antes de executar essa procedure:
> -- CREATE OR ALTER EXCEPTION ERR 'Erro generico';
> c=(a+b);
>
> -- retorna o resultado apenas se não houver erro
> suspend;
>
> -- O bloco abaixo só será executado se houver algum erro em toda a
> procedure.
> when any do
> begin
> if (sqlstate='22003') then exception err 'Resultado fora dos limites
> comportados!!!' ;
> end
> end
>
>
> Apenas para você entender, execute :
> select * from sp_teste(32767,1);
> E o when any vai entrar em ação.
>
> Apenas um dado curioso, uns 2 anos atrás em ambientes de testes, o
> IBExpert interceptava as exceptions antes de chegar ao when...any, até eu
> perceber que não era problema do Firebird levou tempo, não sei se o
> IbExpert ainda tá assim, mas teste no FlameRobin(eu uso este na maior parte
> das vezes) se tiver problemas.
>
> .
>
>
>
> Em 31 de julho de 2014 13:26, Ricardo Rodrigues <ricardopd em gmail.com>
> escreveu:
>
> Boa tarde Gladiston, tem como você colocar este comando nessa trigguer que
>> enviei pra mim ver como ficaria.
>>
>>
>> Em 31 de julho de 2014 10:42, Gladiston Santana <gladiston em vidy.com.br>
>> escreveu:
>>
>> > Não tem segredo, é apenas um bloco que se coloca no corpo de seu psql
>> > (procedure, trigger) que só será executando quando ocorrer uma
>> exception.
>> > Na primeira vez todo mundo acha que é um tipo try...except que precisa
>> > englobar os possiveis comandos que falharão, mas na verdade ele é o
>> > equivalente ao 'on error gosub' do basic, é apenas um when any para sua
>> > psql inteira.
>> >
>> > Um exemplo aqui:
>> > http://www.firebirdsql.org/refdocs/langrefupd25-sqlstate.html
>> >
>> >
>> > Em 31 de julho de 2014 10:27, Ricardo Rodrigues <ricardopd em gmail.com>
>> > escreveu:
>> >
>> > > Não tem mesmo, gostaria se possivel alguem inlcuisse para que eu possa
>> > ver
>> > > como funciona
>> > >
>> > >
>> > ______________________________________________
>> > 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
>> >
>> ______________________________________________
>> 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
>>
>
>
>
> --
> --
> B em B@BU iB em M@B. B em MBBO MBBMMB em B@BZLr E@@@@i r@@@BU
> vB em M@O E em B@Bu BBBM em 0 G em MMM@N8MBB em ZP5r B em B@k 8B@@O
> OB em B@q 2 em BBBM B em B@BO BB em B@B,.:,7B em B@@L uB em B@, OB em B@.
> ,@@@B@ @BBB@, @BBB em 8 M em M@@@ PB em B@B @@@BN iB em B@L
> U em B@B2 LB em B@X B em MBBO MBBM em B i em BBB@. 7 em B@Bi B em B@E
> B@@@BiM em M@B. @BBM em G M em MMB@ v@@M em B, G em B@Z v em B@B.
> 7B em B@O em B@B5 B em B@B8 BBBM em B Z@@@B@ iB@@@2 em B@Br
> NB em M@B em B8 @B em B@8 M em B@B em i:i75 em B@B em r E@@B em B@Bq
> . em B@@@B@: B em B@B@ @B@@@B em B@B@@@ME; .BB em MBB@
> 55.ANOS OMOGBS PBZGGOOMOO117, 7 em BBB@r
> ==============================================r@@@@F=====
> Gladiston Santana 8 em B@B,
> Supervisor de TI G em B@B7
> Tel.:+551147873122 R:228 :@B em B0
> Grupo VIDY - SGQ ISO9001 - 55 ANOS @B em B@.
> Visite nosso site: www·vidy·com·br BB@@@u
> Visite também : www·expolabor·com·br GB em B@N
>
>
>
--
--
B em B@BU iB em M@B. B em MBBO MBBMMB em B@BZLr E@@@@i r@@@BU
vB em M@O E em B@Bu BBBM em 0 G em MMM@N8MBB em ZP5r B em B@k 8B@@O
OB em B@q 2 em BBBM B em B@BO BB em B@B,.:,7B em B@@L uB em B@, OB em B@.
,@@@B@ @BBB@, @BBB em 8 M em M@@@ PB em B@B @@@BN iB em B@L
U em B@B2 LB em B@X B em MBBO MBBM em B i em BBB@. 7 em B@Bi B em B@E
B@@@BiM em M@B. @BBM em G M em MMB@ v@@M em B, G em B@Z v em B@B.
7B em B@O em B@B5 B em B@B8 BBBM em B Z@@@B@ iB@@@2 em B@Br
NB em M@B em B8 @B em B@8 M em B@B em i:i75 em B@B em r E@@B em B@Bq
. em B@@@B@: B em B@B@ @B@@@B em B@B@@@ME; .BB em MBB@
55.ANOS OMOGBS PBZGGOOMOO117, 7 em BBB@r
==============================================r@@@@F=====
Gladiston Santana 8 em B@B,
Supervisor de TI G em B@B7
Tel.:+551147873122 R:228 :@B em B0
Grupo VIDY - SGQ ISO9001 - 55 ANOS @B em B@.
Visite nosso site: www·vidy·com·br BB@@@u
Visite também : www·expolabor·com·br GB em B@N
Mais detalhes sobre a lista de discussão lista