Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment récupérer la valeur courante d'une séquence oracle sans l'incrémenter ?

SELECT last_number
  FROM all_sequences
 WHERE sequence_owner = '<sequence owner>'
   AND sequence_name = '<sequence_name>';

Vous pouvez obtenir une variété de métadonnées de séquence à partir de user_sequences , all_sequences et dba_sequences .

Ces vues fonctionnent d'une session à l'autre.

MODIF :

Si la séquence est dans votre schéma par défaut alors :

SELECT last_number
  FROM user_sequences
 WHERE sequence_name = '<sequence_name>';

Si vous voulez toutes les métadonnées, alors :

SELECT *
  FROM user_sequences
 WHERE sequence_name = '<sequence_name>';

J'espère que ça aide...

EDIT2 :

Une façon longue et fastidieuse de le faire de manière plus fiable si la taille de votre cache n'est pas de 1 serait :

SELECT increment_by I
  FROM user_sequences
 WHERE sequence_name = 'SEQ';

      I
-------
      1

SELECT seq.nextval S
  FROM dual;

      S
-------
   1234

-- Set the sequence to decrement by 
-- the same as its original increment
ALTER SEQUENCE seq 
INCREMENT BY -1;

Sequence altered.

SELECT seq.nextval S
  FROM dual;

      S
-------
   1233

-- Reset the sequence to its original increment
ALTER SEQUENCE seq 
INCREMENT BY 1;

Sequence altered.

Méfiez-vous simplement que si d'autres utilisent la séquence pendant ce temps - ils (ou vous) peuvent obtenir

ORA-08004: sequence SEQ.NEXTVAL goes below the sequences MINVALUE and cannot be instantiated

En outre, vous pouvez définir le cache sur NOCACHE avant la réinitialisation, puis revenir à sa valeur d'origine par la suite pour vous assurer que vous n'avez pas mis en cache beaucoup de valeurs.