Qu'est-ce que cela signifie et comment puis-je me déplacer?
SELECT MySequence.CURRVAL FROM DUAL;
Résultat:
ORA-08002: la séquence MySequence.CURRVAL n'est pas encore définie dans cette session
mysequence.CURRVAL renvoie la dernière valeur obtenue à partir de la séquence mysequence dans la session your, et n'est donc pas définie tant que vous n'avez pas obtenu une valeur en utilisant mysequence.NEXTVAL au moins une fois dans la session. Le but de CURRVAL est de vous permettre d'utiliser la valeur de séquence plus d'une fois dans votre code, par ex.
insert into parent (parent_id, ...) values (mysequence.NEXTVAL, ...);
insert into child (parent_id, ...) values (mysequence.CURRVAL, ...);
Si CURRVAL vient de renvoyer la dernière valeur obtenue à partir de la séquence par any session, alors cela serait inutile dans le code ci-dessus, et pourrait en fait entraîner une corruption des données!
Il s'avère que vous ne pouvez pas utiliser CURRVAL avant d'avoir utilisé NEXTVAL au moins une fois dans votre session.
utilisez ceci
select sequence_name,
to_char(min_value) min_value,
to_char(max_value) max_value,
increment_by,
cycle_flag,
order_flag,
cache_size,
to_char(Last_number) last_number
from user_sequences
where sequence_name='MYSEQUENCE'
Doug,
La vraie question est pourquoi vous avez besoin du currval alors que vous n'avez pas utilisé de nextval dans votre session? Vous pouvez consulter la colonne LAST_NUMBER de la vue USER/ALL/DBA_SEQUENCES, mais pensez aux problèmes de concurrence lorsque vous commencez à l'utiliser.
Cordialement, Rob.
select * from user_sequences where sequence_name='SEQ_V_WORKORDER_RECNO';
dans la requête ci-dessus SEQ_V_WORKORDER_RECNO
mon nom de séquence le remplacer par votre nom de séquence