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 dans toutes les sessions.
EDIT :
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 cela vous aidera...
EDIT2 :
Un moyen long et fastidieux 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.
Attention, si d'autres personnes utilisent la séquence pendant ce temps, elles (ou vous) peuvent obtenir des informations sur la séquence.
ORA-08004: sequence SEQ.NEXTVAL goes below the sequences MINVALUE and cannot be instantiated
Aussi, vous pourriez vouloir mettre le cache à NOCACHE
avant la réinitialisation, puis à sa valeur initiale après, pour s'assurer que vous n'avez pas mis en cache beaucoup de valeurs.
7 votes
Pourquoi ? Quel est le problème que vous essayez de résoudre ? Si vous utilisez correctement les séquences, vous ne devriez jamais vous soucier des valeurs de séquence qui ont été attribuées à d'autres sessions ou des valeurs qui pourraient être attribuées à des sessions ultérieures.
4 votes
Il s'agit d'une vérification après la migration des données pour s'assurer que la séquence a été mise à jour correctement en fonction des données migrées.
5 votes
Alors quel est l'inconvénient d'obtenir simplement la
nextval
de la séquence à tester alors ? Vous ne supposez pas que les séquences seront exemptes de trous, n'est-ce pas ? Donc "gaspiller" une valeur de séquence ne devrait pas être un problème.0 votes
Je suppose que vous avez raison, je ne voulais pas changer l'état de la base de données pour cette vérification mais pour être honnête je ne sais pas pourquoi. merci pour votre perspicacité. néanmoins j'ai appris votre truc sur la séquence, merci à tous !
0 votes
En supposant que vous puissiez obtenir de manière fiable la valeur d'une séquence, quel est votre oracle par rapport auquel vous vérifiez que la séquence a été mise à jour correctement ?
0 votes
Juste à titre d'information, si vous cherchez à vous assurer que vous ne provoquez PAS réellement un +1 sur la séquence, vous êtes plus sûr de faire le select on last_number from user_sequences en supposant que vous savez également qu'il s'agit d'une séquence utilisateur.
1 votes
@JustinCave, j'ai un système sur lequel je fais une migration de données, et je n'ai aucune idée si gap-free est nécessaire ou non. Le fait d'avoir le moins d'effets secondaires possible m'évite, ainsi qu'à d'autres personnes à l'avenir, de courir après une fausse piste pour résoudre d'autres problèmes.