Оракул:последовательность MySequence.currval еще не определена в этом сеансе

StackOverflow https://stackoverflow.com/questions/809247

  •  03-07-2019
  •  | 
  •  

Вопрос

Что это значит и как это обойти?

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 мое имя последовательности замените его своим именем последовательности

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top