[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