Skip to content

Instantly share code, notes, and snippets.

@hotsoft-desenv2
Created May 29, 2025 14:08
Show Gist options
  • Save hotsoft-desenv2/f72ed18cbd91a16cbf306ec82c5b56b7 to your computer and use it in GitHub Desktop.
Save hotsoft-desenv2/f72ed18cbd91a16cbf306ec82c5b56b7 to your computer and use it in GitHub Desktop.
SET TERM ^ ;
CREATE OR REPLACE PROCEDURE ATUALIZA_CODIGOS_DUPLICADOS
AS
DECLARE VARIABLE v_codigo INTEGER; -- Tipo da coluna CODIGO
DECLARE VARIABLE v_id INTEGER; -- Tipo da coluna ID
DECLARE VARIABLE v_min_id INTEGER; -- Menor ID do grupo de duplicatas
BEGIN
-- Itera sobre os grupos de CODIGO com duplicatas
FOR
SELECT CODIGO
FROM MINHA_TABELA
GROUP BY CODIGO
HAVING COUNT(*) > 1 -- Apenas grupos com duplicatas
INTO :v_codigo
DO
BEGIN
-- Encontra o menor ID do grupo para preservar
SELECT MIN(ID)
FROM MINHA_TABELA
WHERE CODIGO = :v_codigo
INTO :v_min_id;
-- Itera sobre as linhas do grupo, exceto a com menor ID
FOR
SELECT ID
FROM MINHA_TABELA
WHERE CODIGO = :v_codigo
AND ID <> :v_min_id
INTO :v_id
DO
BEGIN
-- Atualiza a linha com um novo valor do generator
UPDATE MINHA_TABELA
SET CODIGO = GEN_ID(GEN_CODIGO, 1)
WHERE ID = :v_id;
END
END
END^
SET TERM ; ^
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment