Não existe nenhum comando DROP GENERATOR… no InterBase/Firebird. A única possibilidade é eliminar a definição do generator da tabela de sistema:
DELETE FROM RDB$GENERATORS
WHERE RDB$GENERATOR_NAME=’MYGEN’;
Mas este método tem algumas DESVANTAGENS:
#InterBase não verifica as dependências, o que significa que permite eliminar o Generator mesmo este estando a ser utilizado por um Trigger ou Stored Procedure.
Felizmente, basta voltar a criar o generator em falta (e definir o valor inicial para remediar o problema).
#Cada Generator consiste de duas partes:
- registo na tabela RDB$GENERATORS
- a variavel/contador em si, que é armazenado numa página especial da Base de Dados
o Campo RDB$GENERATOR_ID na Tabela RDB$GENERATORS é de factoo indice para o array de generatorsna pagina de generators.
Quando eliminamos um generator da tabela de sistema, o espaço que lhe é atribuido na página de generators(e o generator_ID) continuam não usados.
O que significa que o recem criado generator terá sempre um novo valor para rdb$generator_id em vez de reutilizar o existente.
Resumindo, eliminar o Generator vale a pena apenas se pretendermos fazer o Backup/restore da base de dado, ou se pretendermos acabar com o generator e não voltar a criar um novo.
No caso precisar de um Generator com um nome diferente , basta renomear um antigo, não utilizado:
UPDATE RDB$GENERATORS
SET RDB$GENERATOR_NAME=’NEW_GEN’
WHERE RDB$GENERATOR_NAME=’OLD_GEN’;