[firebase-br] Generator Duplicando?

Gladiston Santana gladiston em vidy.com.br
Seg Abr 25 12:13:06 -03 2016


O sequenciador pode sair fora da ordem geralmente em manutenção manual, as
vezes por um programa de gerenciamento de banco como o ibexpert.
Apenas ajuste a sequencia correta, eu faço através de script, segue um
exemplo:

/* Cria um sequenciador para uso nas procedures e partes do programa
Pode ser usado da seguinte forma:
P_NEXT_ID=GEN_ID(SEQ_ID_CLIENTE, 1);
*/

SET TERM ^ ;
EXECUTE BLOCK AS
declare variable nMAX BIGINT = 0;
declare variable SEQ_NAME varchar(31)='SEQ_ID_CLIENTE';
BEGIN
  if (not exists(SELECT * FROM RDB$GENERATORS WHERE RDB$GENERATOR_NAME =
:SEQ_NAME))
  then execute statement 'CREATE SEQUENCE '||:SEQ_NAME||';';
  -- captura a numeracao mais alta e a transfere para o sequenciador
  if (exists(SELECT * FROM RDB$RELATIONS WHERE RDB$RELATION_NAME =
'CLIENTES')) then
  begin
    select coalesce(max(ID_CLIENTE),0) FROM CLIENTES  into :nMAX;
    if (:nMax is null) then nMAX=0;
    execute statement 'ALTER SEQUENCE '||:SEQ_NAME||' RESTART WITH
'||cast(:nMax as varchar(12))||';';
  end
END^
SET TERM ; ^

E para ser sincero, só uso esses tipos de script para criar o banco e ou
após um transferencia de outro banco, nunca houve ainda usa-lo para
corrigir o problema que descreveu.



Mais detalhes sobre a lista de discussão lista