Ajuda como montar uma trigger para auto_incremento
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. Está tudo 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
Comecei a criar as minhas tabelas e preciso criar campos auto_incrementos.
Vocês poderiam comentar este código que peguei na net. Está tudo 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
Curtidas 0
Respostas
Inutaishou
30/07/2004
Amigo, o Generator armazena o código atual do último registro da tabela... Só pra isso ele serve...
Já o Trigger, é o que faz todo o trabalho de inserção do código autoinc...
Crie o Trigger da seguinte forma:
Ele já estará fazendo o autoincremento do seu campo...
Porém, dessa forma, qualquer auteração que você fizer no campo de código em uma inserção será descartada! Cuidado quanto a isso... Para evitar que as alterações feitas por você manualmente sejam descartadas, coloque a seguinte linha logo após o Begin:
PS: Se você usar o IBExpert, fica mais fácil para criar seus triggers...
[]´s,
Já o Trigger, é o que faz todo o trabalho de inserção do código autoinc...
Crie o Trigger da seguinte forma:
CREATE TRIGGER CLIENTE_BI FOR CLIENTE ACTIVE BEFORE INSERT POSITION 0 AS BEGIN NEW.ID = GEN_ID(GEN_CLIENTE_ID,1); END ^
Ele já estará fazendo o autoincremento do seu campo...
Porém, dessa forma, qualquer auteração que você fizer no campo de código em uma inserção será descartada! Cuidado quanto a isso... Para evitar que as alterações feitas por você manualmente sejam descartadas, coloque a seguinte linha logo após o Begin:
IF (NEW.ID IS NULL) THEN
PS: Se você usar o IBExpert, fica mais fácil para criar seus triggers...
[]´s,
GOSTEI 0
Eniorm
30/07/2004
Eu uso assim:
Quando for ´zerar´ toda a tabela pelo comando delete from nomedatabela
para voltar a autonumeração para o início, ou seja, voltar para o 0, use o comando:
CREATE GENERATOR nome_do_gerador; COMMIT; SET TERM !! ; CREATE TRIGGER nome_da_trigger FOR tabela BEFORE INSERT POSITION 0 AS BEGIN NEW.codigo_da_tabela = GEN_ID(nome_do_gerador, 1); END;!! SET TERM ; !!
Quando for ´zerar´ toda a tabela pelo comando delete from nomedatabela
para voltar a autonumeração para o início, ou seja, voltar para o 0, use o comando:
set generator nomedogenerator to 0; commit;
GOSTEI 0
Sandra
30/07/2004
Peço desculpas a quem respondeu este tópico. Porém, se encontra em duplicidade!
http://delphiforum.icft.com.br/forum/viewtopic.php?t=49393
rbfonseca,
Por favor, escolha o fórum adequado de acordo com a sua dúvida e não duplique mensagens.
Releia as [url=http://delphiforum.icft.com.br/forum/viewtopic.php?t=6689]Regras de Conduta[/url] do fórum.
http://delphiforum.icft.com.br/forum/viewtopic.php?t=49393
rbfonseca,
Por favor, escolha o fórum adequado de acordo com a sua dúvida e não duplique mensagens.
Releia as [url=http://delphiforum.icft.com.br/forum/viewtopic.php?t=6689]Regras de Conduta[/url] do fórum.
GOSTEI 0