Firebird – Obtendo valor coluna auto-incremento ao fazer INSERT

Sabe aquele cadastro de cliente que você vai inserir um novo cliente e lá o código do cliente é uma coluna gerada com GENERATOR – (auto-incremento), pode ser uma grande dor de cabeça se não estiver seguro sobre o código inserido na tabela.
Muitas vezes precisa deste ID para utiliza-lo em outro lugar. Se errar o ID o registro final irá ficar errado, associando ao cliente errado…
Outra situação é, se demorar algum tempo para descobrir o ID e outro usuário inserir um outro cliente enquanto o app fazia alguma coisa…. vai dar confusão. É preciso garantir com precisão o ID que foi inserido no momento que o banco postou na tabela.

Para resolver estas situações o Firebird permite obter valores de retorno de um INSERT.

Exemplo:

   insert into cliente( nome, endereco, ...) values( :nome,:endereco,...)
   returning id_cliente into :id

Ao executar o comando de INSERT, o banco irá retornar no parâmetro o valor inserido pelo GENERATOR no parâmetro ID.

2 comentários

  1. e como essa informação e tratada por exemplo dentro do delphi??

    veja esse bloco:

    ClientDataSet1.Execute;
    CdCodigo := ClientDataSet1.FieldByName(‘id_cliente ‘).asInteger;

    seria isso?

    1. o retorno é um parâmetro, então o correto é usar ParamByName(…, tenho report de pessoas que conseguiram retornar como FieldByName(… também, depois que fez o OPEN. No exemplo o parâmetro de retorno é o ID.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *