وحي:لم يتم تعريف تسلسل MySequence.currval بعد في هذه الجلسة

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

  •  03-07-2019
  •  | 
  •  

سؤال

ماذا يعني هذا، وكيف يمكنني الالتفاف حوله؟

SELECT MySequence.CURRVAL FROM DUAL;

نتيجة:

أورا-08002:لم يتم تعريف التسلسل MySequence.CURRVAL بعد في هذه الجلسة

هل كانت مفيدة؟

المحلول

تقوم mysequence.CURRVAL بإرجاع أحدث قيمة تم الحصول عليها من التسلسل mysequence in لك الجلسة، وبالتالي لم يتم تعريفها حتى تحصل على قيمة باستخدام mysequence.NEXTVAL مرة واحدة على الأقل في الجلسة.الغرض من CURRVAL هو السماح لك باستخدام قيمة التسلسل أكثر من مرة في التعليمات البرمجية الخاصة بك، على سبيل المثال.

insert into parent (parent_id, ...) values (mysequence.NEXTVAL, ...);

insert into child (parent_id, ...) values (mysequence.CURRVAL, ...);

إذا قام CURRVAL بإرجاع القيمة الأخيرة التي تم الحصول عليها من التسلسل بواسطة أي جلسة، فسيكون عديم الفائدة في الكود أعلاه، وفي الواقع يمكن أن يؤدي إلى تلف البيانات!

نصائح أخرى

واتضح أنه لا يمكنك استخدام 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 عمود / ALL عرض USER / DBA_SEQUENCES، ولكن التفكير في قضايا التزامن عند البدء في استخدام ذلك.

والتحيات، روب.

select * from user_sequences     where sequence_name='SEQ_V_WORKORDER_RECNO';

وفي الاستعلام أعلاه SEQ_V_WORKORDER_RECNO اسمي تسلسل استبداله بالاسم التسلسل الخاص بك

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top