Fórum Trigger de Auto-Incremento sem disperdiçar número #399197

14/04/2011

0

E ai pessoal!! Estou com alguns probleminhas aqui, em uma trigger!! Uso firebird, ibexpert, e o Delphi tenho uma tabela de clientes que tem vário campos, mas para ser tornar mais rápido a coisa aqui, vou mostrar só o campo código, e o campo nome, segue abaixo a tabela.   CREATE TABLE CLIENTES
(
    CLIE_CODIGO  INTEGER NOT NULL,
    CLIE_NOME    VARCHAR(40) NOT NULL,     CONSTRAINT PKCLIENTES PRIMARY KEY(CLIE_CODIGO)
);   Tentei fazer uma trigger de auto incremento, sem disperdiçar números, ou seja, pegar o ultimo código e mais um (+ 1). Para isso fiz um subselect dentro da trigger, mas da erro na hora de rodar a trigger, em compensação tentei rodar o subselect sózinho, e deu certo, só que junto com a trigger ele da erro, estou achando que é algum problema na sintaxe da trigger, que segue a baixo!!   create trigger "clientes_bi" for clientes
active before insert position 0
as
begin
if(new.clie_codigo is null) then
    new.clie_codigo = (select max(clientes.clie_codigo) from clientes) + 1;
end   Há, mais um problema também, como faço para solucionar o problema da primeira inserção, que quando não tem nenhum registro na tabela   Sou meio novato em banco de dados ainda, alguém poderia me ajudar, desde já agradeço a todos!! Abraços!!
Daniel Loro

Daniel Loro

Responder

Posts

14/04/2011

Daniel Loro

Pessoal agora que eu fui ver na hora de digitar a trigger aqui digitei errado uma coisa, botei aspas duplas no nome dela.   Mas mesmo assim ela esta dando errros   create trigger clientes_bi for clientes
active before insert position 0
as
begin
if(new.clie_codigo is null) then
    new.clie_codigo = (select max(clientes.clie_codigo) from clientes) + 1;
end   Aguardo ajudas!!
Responder

Gostei + 0

14/04/2011

Emerson Nascimento

e porque a trigger não atende à sua necessidade?


de qualquer forma, respondo sua pergunta quanto à instrução:

create trigger clientes_bi for clientes
active before insert position 0
as
begin
    if(new.clie_codigo is null) then
        new.clie_codigo = (select coalesce(max(clie_codigo),0)+1 from clientes);

end

Responder

Gostei + 0

17/04/2011

Thiago Santana

Use o generator e uma Trigger
  if (New.Codigo is null) then
    new.Codigo = Gen_id(nomeGenerators,1);
Responder

Gostei + 0

06/05/2011

Rafael Mattos

Pessoal agora que eu fui ver na hora de digitar a trigger aqui digitei errado uma coisa, botei aspas duplas no nome dela.   Mas mesmo assim ela esta dando errros   create trigger clientes_bi for clientes
active before insert position 0
as
begin
if(new.clie_codigo is null) then
    new.clie_codigo = (select max(clientes.clie_codigo) from clientes) + 1;
end   Aguardo ajudas!!



mas qual é o erro que apresenta?
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar