[firebase-br] Auto incremento FB

Alysson Gonçalves de Azevedo agalysson em gmail.com
Ter Maio 10 08:55:05 -03 2011


você pode selecionar o generator puro tb...

SELECT GEN_ID(NomeGenerator,0) FROM RDB$DATABASE para selecionar o
último generator criado

SELECT GEN_ID(NomeGenerator,1) FROM RDB$DATABASE para selecionar o
próximo generator


Alysson Gonçalves de Azevedo
(11) 8491-7730

(\(''^_^ )/)

"Eu prefiro ser essa metamorfose ambulante do que ter aquela velha opinião
formada sobre tudo." [Raul Seixas]





2011/5/10 Tecnobyte Informática <temp2 em tecnobyte.com.br>

> 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
>
> ______________________________________________
> 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