Оракул:последовательность MySequence.currval еще не определена в этом сеансе
Вопрос
Что это значит и как это обойти?
SELECT MySequence.CURRVAL FROM DUAL;
Результат:
ОРА-08002:последовательность MySequence.CURRVAL еще не определена в этом сеансе
Решение
mysequence.CURRVAL возвращает последнее значение, полученное из последовательности mysequence в твой сеанс и, следовательно, не определен до тех пор, пока вы не получите значение с помощью mysequence.NEXTVAL хотя бы один раз за сеанс.Цель CURRVAL — позволить вам использовать значение последовательности более одного раза в вашем коде, например.
insert into parent (parent_id, ...) values (mysequence.NEXTVAL, ...);
insert into child (parent_id, ...) values (mysequence.CURRVAL, ...);
Если CURRVAL только что вернул последнее значение, полученное из последовательности с помощью любой session, то в приведенном выше коде это будет бесполезно и фактически может привести к повреждению данных!
Другие советы
Оказывается, вы не можете использовать CURRVAL, пока не используете NEXTVAL хотя бы один раз за сеанс.
использовать это
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'
Даг,
Реальный вопрос заключается в том, зачем вам нужен currval, если вы не использовали nextval в своем сеансе?Вы можете посмотреть столбец LAST_NUMBER представления USER/ALL/DBA_SEQUENCES, но подумайте о проблемах параллелизма, когда начнете его использовать.
С уважением, Роб.
select * from user_sequences where sequence_name='SEQ_V_WORKORDER_RECNO';
в приведенном выше запросе SEQ_V_WORKORDER_RECNO
мое имя последовательности замените его своим именем последовательности