[firebase-br] Auto incremento FB
Tecnobyte Informática
temp2 em tecnobyte.com.br
Ter Maio 10 08:50:28 -03 2011
Bom dia
No Firebird não existe campo do tipo autoincremental, como existem em outros
bancos de dados, mas existe um recurso chamado GENERATOR (SEQUENCE em
Ansi-SQL) que serve para criar contadores. Estes contadores podem ser usados
para qualquer finalidade onde se quer que um número seja incrementado sem
risco de repetição, como é o caso de uma chave-primária. Não existe nada no
Firebird que ligue um campo diretamente ao contador, mas você pode fazer
isto de diversas formas (via trigger, aplicação, etc.).
COMO CRIAR UM GENERATOR (SEQUENCE)?
Sintaxe:
CREATE GENERATOR NomeDoGerador;
ou
CREATE SEQUENCE NomeDaSequencia;
Exemplos:
CREATE GENERATOR Gen_Venda_Id;
CREATE SEQUENCE SQ_Venda_Id;
Note que para o Firebird, generator e sequence são a mesma coisa. A única
diferença é que sequence segue o padrão Ansi-SQL, enquanto que generator é
um recurso antigo do Firebird/Interbase e não está previsto no Ansi-SQL.
COMO OBTER O VALOR DE UM GENERATOR?
Sintaxe:
GEN_ID(NomeDoGerador, Incremento)
Exemplos:
SELECT GEN_ID(Gen_Venda_Id, 1) FROM RDB$DATABASE; -- Obtém o próximo valor
do gerador.
SELECT GEN_ID(Gen_Venda_Id, 0) FROM RDB$DATABASE; -- Obtém o valor corrente
do gerador.
SELECT NEXT VALUE FOR Gen_Venda_Id FROM RDB$DATABASE; -- Obtém o próximo
valor do gerador.
COMO USAR UM GENERATOR EM UM TRIGGER?
Crie um trigger do tipo BEFORE INSERT e nele verifique se o campo chave está
vazio. Se estiver vazio, preencha com o próximo valor do generator.
Exemplo:
SET TERM ^ ;
CREATE TRIGGER Trig_Venda_AntesInclusao FOR Venda BEFORE INSERT AS
BEGIN
IF (NEW.Id IS NULL) THEN
NEW.Id = GEN_ID(Gen_Venda_Id, 1);
END^
SET TERM ; ^
COMO USAR UM GENERATOR NO INSERT?
INSERT INTO Venda(Id, Data, Obs)
VALUES(GEN_ID(Gen_Venda_Id, 1), CURRENT_DATE, 'Teste');
Se quiser que o ID seja retornado, use:
INSERT INTO Venda(Id, Data, Obs)
VALUES(GEN_ID(Gen_Venda_Id, 1), CURRENT_DATE, 'Teste')
RETURNING Id;
Há também a opção de pegar o próximo valor do gerador e colocar em uma
varíavel para posteriormente usá-lo em um comando INSERT (atualmente uso
desta forma devido a algumas limitações dos componentes de acesso com os
quais trabalho).
Não há exatamente uma receita pronta de como usar geradores no Firebird,
pois cada situação requer uma solução diferente. Muitas vezes haverá,
inclusive, mais de uma solução para o mesmo problema e o desenvolvedor
deverá fazer uma escolha.
Atenciosamente.
Daniel P. Guimarães
Tecnobyte Informática
www.tecnobyte.com.br
-----Mensagem Original-----
From: Gilberto Theves
Sent: Tuesday, May 10, 2011 7:21 AM
To: FireBase
Subject: [firebase-br] Auto incremento FB
Pessoal, apesar de ser um assunto já batido, me deixou com muitas
duvidas pois, achei varias "vertentes" de auto incremento no FB porem
todas diferentes e uma mais esquisita que a outra, a principio não
consegui fazer com que nenhuma funcionasse.O que gostaria de pedir é um
código que realmente funcione e as instruções de como ele funciona,
realmente não entendi se é preciso algo no código da programação (no
caso JSP) ou é simplesmente SQL.
Desde já agradeço a atenção dispensada
--
Atenciosamente,
Gilberto Theves
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
Mais detalhes sobre a lista de discussão lista