Veja de uma forma bastante simplificada o uso de Generators no Interbase/Firebird.
Obter o valor de um generator
Para obter o valor de um generator devemos usar a função GEN_ID do InterBase/FireBird. A sintaxe é:
GEN_ID(NomeDoGenerator, Incremento);
Exemplos:
GEN_ID(Gen_Cliente, 1);
GEN_ID(Gen_Cliente, 0);
No primeiro exemplo o generator será incrementado e o novo valor será retornado. Já no segundo exemplo o generator não será incrementado e seu valor atual será retornado.
Dentro de um trigger podemos atribuir o valor de um generator a um campo da tabela, como mostra o exemplo a seguir:
CREATE TRIGGER TRIG_Cliente FOR Cliente BEFORE INSERT AS
BEGIN
NEW.Codigo = GEN_ID(Gen_Cliente, 1);
END^
Para obter o valor de um generator através de uma aplicação, podemos executar o comando SELECT mostrado a seguir sobre uma tabela que possua apenas um registro:
SELECT GEN_ID(NomeDoGenerator, 1) FROM NomeTabela
Onde NomeTabela é o nome de uma tabela do banco de dados que precisa ter um, e somente um, registro. Geralmente usamos a tabela de sistema RDB$DATABASE para este propósito. Eis um exemplo:
SELECT GEN_ID(Gen_Cliente_Codigo, 1) FROM RDB$DATABASE;
Reiniciar a contagem de um generator
Para re-iniciar a contagem de um generator basta executar o comando abaixo:
SET GENERATOR TO X;
Onde X é um número inteiro.
O exemplo abaixo define o valor do generator GEN_Cliente_Codigo igual a zero:
SET GENERATOR GEN_Cliente TO 0
Observação: O valor obtido com GEN_ID(GEN_Cliente, 1) após o exemplo dado anteriormente será 1 (um), pois a função GEN_ID retorna o valor do generator já incrementado.
Remover (excluir) um generator
No InterBase 6.0.x:
DELETE FROM RDB$GENERATORS
WHERE RDB$GENERATOR_NAME = ‘NOME_DO_GENERATOR’;
No FireBird:
DROP GENERATOR NOME_DO_GENERATOR;
link