[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