Generators em Firebird

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

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s

%d bloggers like this: