Può capitare di dover azzerare una sequence in maniera dinamica direttamente da una stored procedure.
Vi propongo una delle possibili soluzioni premettendo ai puristi di Oracle che esistono sicuramente soluzioni migliori.

1
2
3
4
5
6
7
8
        -- Quando decidiamo di restartare la sequence
        SELECT 0 - MY_SEQ.NEXTVAL
        INTO nCURR
        FROM dual;
 
        EXECUTE IMMEDIATE ('alter sequence MY_SEQ increment by ' || nCURR);
        SELECT MY_SEQ.NEXTVAL INTO nCURR FROM dual;
        EXECUTE immediate ('alter sequence MY_SEQ increment by 1');


In una variabile di tipo NUMBER, precedentemente dichiarata, salviamo il NEXTVAL della sequence in valore negativo. Modifichiamo ora la sequence con un increment by del valore appena salvato. Ora richiamando per la prima volta la sequence, essa stessa partirà da zero, perchè il suo nextval sara uguale a n – n.
Non resta che modificarla nuovamente reimpostando un increment by 1.

Se i miei post ti sono stati di aiuto o ti sono sembrati intressanti puoi offrirmi un caffè :)