Trigger de Auto-Incremento sem disperdiçar número
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!!
(
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
Curtidas 0
Respostas
Daniel Loro
14/04/2011
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!!
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!!
GOSTEI 0
Emerson Nascimento
14/04/2011
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
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
GOSTEI 0
Thiago Santana
14/04/2011
Use o generator e uma Trigger
if (New.Codigo is null) then
new.Codigo = Gen_id(nomeGenerators,1);
if (New.Codigo is null) then
new.Codigo = Gen_id(nomeGenerators,1);
GOSTEI 0
Rafael Mattos
14/04/2011
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!!
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?
GOSTEI 0