Ajuda como montar uma trigger para auto_incremento

Firebird

30/07/2004

Caros amigos estou migrando do Paradox para o Firebird.

Comecei a criar as minhas tabelas e preciso criar campos auto_incrementos.

Vocês poderiam comentar este código que peguei na net. Se o mesmo está ok?

Posso utilizá-lo nas minhas tabelas?

Generator
CREATE GENERATOR GEN_CLIENTE_ID;
SET GENERATOR GEN_CLIENTE_ID TO 0;


TRIGGER
AS
DECLARE VARIABLE AUX_ID INTEGER;
begin
if (new.id = 0) then
begin
select max(cliente.id) from cliente into :aux_id;
if (:aux_id is null) then
aux_id = 0;
aux_id = aux_id+1;
new.id = :aux_id;
end
end

Será de grande ajuda

No Aguardo
Raphael


Rbfonseca

Rbfonseca

Curtidas 0

Respostas

Flavia_mococa

Flavia_mococa

30/07/2004

Olá Rafael, tudo bem?
Para criar um campo auto incremento na sua tabela Voce pode usar um generator associado a uma trigger:

create generator nome_do_generator;
set generator nome_do_generator to 0;

create trigger nome_da_trigger
active before insert position 0
as
begin
if (new.nome_do_campo is null) then
new.Nome_do_campo = gen_id(nome_do_generator,1);
end

p.s.: Mandei o inicio do meu banco para voce dar uma olhada, é sobre o sistema de cemieterios, lembra? Lá tem alguns triggers e generators criados, voce pode dar uma estudada em todo caso aconselho a baixao o IBExpert para lhe auxiliar na construção do seu banco, eu o baixei e me surpreendi com a facilidade de se criar bd´s por ele.
Flavinha


GOSTEI 0
Vinicius2k

Vinicius2k

30/07/2004

Raphael,

´Uma coisa é uma coisa, outra coisa é outra coisa´ :D

No código acima, vc duas formas distintas de criar campos auto-incremento...

No primeiro é criado um Generator e o mais comum é que seja associado a uma Trigger que dispare a função GEN_ID que fará o auto-incremento... assim como mostrado pela Flavinha...

O segundo é uma Trigger que [b:7b9c4c9ac7]não está usando o Generator[/b:7b9c4c9ac7]... ela está fazendo o auto-incremento, baseado num select max (maior valor) da própria tabela... ela verifica que o maior código é 100 e o próximo será 101, por exemplo...

T+


GOSTEI 0
POSTAR