[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