[firebase-br] Ref. Erro Trigger

Sandro Souza escovadordebits em gmail.com
Seg Dez 1 15:27:19 -03 2008


Bom dia/tarde Omar.

Definindo que um campo é obrigatório (NOT NULL) faz com que o banco de dados
exija que sua aplicação forneça um valor para o campo, independentemente de
ter ou não alguma trigger associada à tabela.

Nesse caso, como sugestão, você poderia fazer o seguinte:

1 - Definir um valor padrão para o campo obrigatório, como por exemplo, o
zero.

CREATE TABLE TESTE (
    CODIGO  INTEGER DEFAULT 0 NOT NULL
);

Dessa forma, o campo sempre terá um valor, nem que seja o padrão.

2 - Na respectiva trigger, se o valor desse campo for igual ao valor padrão
(zero), será substituido pelo próximo valor válido.

No exemplo abaixo, não estou utilizando generator:

CREATE OR ALTER TRIGGER TRG_TESTE_BI FOR TESTE
ACTIVE BEFORE INSERT POSITION 0
AS
declare variable maximo integer;
begin
  // O valor do código é o padrão?
  if (new.codigo = 0) then
  begin
    // Obtém o maior valor utilizado até o momento.
    select max(codigo) from teste into :maximo;
    // Nenhum registro consta ainda nessa tabela?
    if (maximo is null) then
      // Assume que o maior valor encontrado é zero.
      maximo = 0;
    // Define o próximo valor a ser utilizado.
    new.codigo = maximo + 1;
  end
end

É apenas uma sugestão.

2008/12/1 Omar Haddad <omarhaddadm em gmail.com>

> Salve amigos da lista, estamos ai aprendendo a trabalhar com o Firebird (
> is
> fire !) (rs)
>
> Mas amigos.é o seguinte:
>
> Anteriormente crei as tabelas sem campo chave específico, por exemplo,
> categoria. Criei um generator e uma trigger ao inserir atualizando o campo
> CAT_CODIGO (este seria o chave)
>
> Quando eu não tinha definido nenhum campo chave, funcionava de boa o
> cadastro, inclusão/alteração/etc. Agora, resolvi definir um campo como
> chave, e quem foi, (já sei) CAT_CODIGO,
> coloquei ele como 'not null" e o defini na constraints como chave primária
>
> Agora, rodando a aplicação, ao tentar inserir uma categoria, eu recebo a
> mensagem:
>
> Campo "CAT_CODIGO" deve ter um valor"
>
> Mas se a trigger esta definida para o campo CAT_CODIGO no before insert,
> qual a razão desta mensagem ?
>
> PS: Eu ja fui cliquei 2x no campo CAT_CODIGO, fui na aba Auto-Increment e
> marquei a GEN_CATEGORIA, novamente mas nada.
>
> Abraço e obrigado pela paciência.
>
> Att.
> Omar
> ______________________________________________
> 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