Pular para o conteúdo

Fóruns Banco de dados Oracle Identificando perda de sequencia Identificando perda de sequencia

#106451
rman
Participante

    @Hudson

    Já time o mesmo problema, e foi bacana resolver, segue a solução:


    CREATE TABLE SEQ(
    ID NUMBER
    );


    INSERT INTO SEQ(ID) VALUES(1);
    INSERT INTO SEQ(ID) VALUES(6);
    INSERT INTO SEQ(ID) VALUES(10);
    INSERT INTO SEQ(ID) VALUES(11);
    INSERT INTO SEQ(ID) VALUES(12);
    INSERT INTO SEQ(ID) VALUES(20);

    COMMIT;


    WITH SEQ_TEMP AS (
    SELECT ROWNUM ID,X.SEQUENCIA
    FROM(
    SELECT ID SEQUENCIA
    FROM SEQ
    WHERE ID >= 1
    UNION
    SELECT -1
    FROM DUAL
    WHERE NOT EXISTS(
    SELECT 1
    FROM SEQ
    WHERE ID = 1
    )
    ORDER BY 1
    ) X
    ORDER BY 1
    )
    SELECT
    CASE
    WHEN N1.SEQUENCIA 0 THEN
    CASE
    WHEN N2.SEQUENCIA - N1.SEQUENCIA - 1 = 1 THEN
    CAST(N1.SEQUENCIA + 1 AS VARCHAR2(16))
    ELSE
    CAST(N1.SEQUENCIA + 1 AS VARCHAR2(16))||' ATÉ '||CAST(N2.SEQUENCIA - 1 AS VARCHAR2(16))
    END
    END SEQUENCIA
    ,CASE
    WHEN N1.SEQUENCIA 0 THEN
    N2.SEQUENCIA - N1.SEQUENCIA - 1
    END TOTAL
    FROM SEQ_TEMP N1
    INNER JOIN SEQ_TEMP N2 ON N2.ID = N1.ID + 1
    WHERE N2.SEQUENCIA - N1.SEQUENCIA - 1 > 0
    ORDER BY N1.SEQUENCIA;
    ;