Information and communication technology me.think.toString("blog");
Oracle
Oracle e PL/SQL
Restart Oracle Sequence from Stored Procedure
1Può 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.
Mostra codice PLSQL
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.