Restart Oracle Sequence from Stored Procedure

one Commented martedì, gennaio 12th, 2010

Under: Oracle

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.

One Response to “Restart Oracle Sequence from Stored Procedure”

  1. [...] This post was mentioned on Twitter by Antonio Ferraioli, Antonio Ferraioli. Antonio Ferraioli said: Restart an @Oracle sequence from a stored procedure: http://www.antferr.com/lang/it-it/oracle/restart-oracle-sequence-from-stored-procedure [...]

Leave a Reply

Get Adobe Flash playerPlugin by wpburn.com wordpress themes