Geradores de Chaves no Interbase (Generators)
Um gerador (generator) é um objeto do SGBD Interbase que
permite "gerar" números sequenciais unívocos com o
objetivo principal de inseri-los automaticamente (via um trigger)
na coluna correspondente à Chave Primária de uma tabela.
Os números de um gerador possuem 64 bits e são gerados
chamando a função do sistema gen_id(nome_gerador, incremento),
onde incremento é o valor a ser somado ao valor corrente
do gerador. O valor inicial de um gerador (default = 1) pode
ser dado através do comando set generator nome_gerador
to valor. (Este comando na verdade "reseta"
o gerador, por isto só deveria ser emitido uma vez, antes de qualquer
utilização do gerador, caso contrário pode-se criar
valores de chaves duplicadas!). Uma coluna que vai receber como valor um
número de um gerador deve ser definida dentro do comando create
table com o tipo
integer (internamente o tipo é
ISC_INT64, que define um inteiro de 64 bits)
Vários geradores podem ser criados numa Base de Dados.
Os passos seguintes ilustram a criação de um gerador
usando isql e sua utilização num trigger para criação
da Chave Primária da tabela customer da base de dados
employee.gdb:
-
create generator cust_no_gen;
-
set generator cust_no_gen to 1000;
-
set term !;
-
create trigger set_cust_no for customer
before insert as
begin
new.cust_no = gen_id(cust_no_gen,
1);
end;
!
-
set term ;!
Observe que é fundamental que o trigger seja definido com a opção
before
insert (veja notas
de aula sobre a semântica de triggers no Interbase). Observe
também que os comandos insert da aplicação,
sobre a tabela customer, não devem especificar
(por razões óbvias) o valor da Chave Primária cust_no.
Por razões desconhecidas não existe o comando drop
generator no Interbase. Para remover um gerador V. deve primeiro
remover ou alterar o trigger que o usa e depois remover o gerador
do dicionário do Interbase via comando:
delete from rdb$generators where rdb$generators_name =
'NOME_GERADOR';