سؤال

التالية Oracle SQL البرمجية بإنشاء خطأ "ORA-02287:رقم تسلسل لا يسمح هنا":

INSERT INTO Customer (CustomerID,Name) VALUES (Customer_Seq.nextval,'AAA');
SELECT * FROM Customer where CustomerID=Customer_Seq.currval;

يحدث الخطأ في السطر الثاني (SELECT).أنا لا أفهم حقا مشكلة ، لأن هذا العمل:

INSERT INTO Customer (CustomerID,Name) VALUES (Customer_Seq.nextval,'AAA');
SELECT Customer_Seq.currval from dual;
هل كانت مفيدة؟

المحلول

كنت قد نشرت بعض التعليمات البرمجية ، لذلك فإنه ليس من الواضح ما كنت تحاول تحقيق.إذا كنت تريد أن تعرف القيمة المعينة ، ويقول عابرة إلى بعض الإجراءات الأخرى يمكن أن تفعل شيئا مثل هذا:

SQL> var dno number
SQL> insert into dept (deptno, dname, loc)
  2      values (deptno_seq.nextval, 'IT', 'LONDON')
  3      returning deptno into :dno
  4  /

1 row created.

SQL> select * from dept
  2  where deptno = :dno
  3  /

    DEPTNO DNAME          LOC
---------- -------------- -------------
        55 IT             LONDON

SQL>

تحرير

يمكننا استخدام عودته شرط للحصول على قيم أي عمود ، بما في ذلك تلك التي تم تحديدها مع القيم الافتراضية أو تؤدي التعليمات البرمجية.

نصائح أخرى

لا تقول ما نسخة من "أوراكل" الذي تستخدمه.هناك في الماضي القيود المفروضة على حيث تسلسل يمكن استخدامها في PL/SQL - في معظمها إن لم يكن كلها ذهبت في 11G.أيضا ، هناك قيود في SQL - انظر هذه القائمة.

في هذه الحالة قد تحتاج إلى كتابة:

SELECT Customer_Seq.currval INTO v_id FROM DUAL; 
SELECT * FROM Customer where CustomerID=v_id;

(تحريرها بعد تعليقات).

هذا لا حقا والإجابة على سؤالك مباشرة ، ولكن ربما ما تريد القيام به لا يمكن حلها باستخدام إدراج عودة الحدوث ؟

DECLARE
  -- ...
  last_rowid rowid;
  -- ...
BEGIN
  -- ...
  INSERT INTO Customer (CustomerID,Name) VALUES (Customer_Seq.nextval,'AAA') RETURNING rowid INTO last_rowid;
  SELECT * FROM Customer where rowid = last_rowid;
  -- ...
END;
/

لا يجوز لك استخدام تسلسل في جملة WHERE - أنها لا تبدو طبيعية في السياق الخاص بك, ولكن أوراكل لا تسمح الإشارة في المقارنة التعبير.

[عدل]

وهذا من شأنه أن يكون PL/SQL تنفيذ:

declare
v_custID number;
cursor custCur is
  select customerid, name from customer
   where customerid = v_custID;
begin
select customer_seq.nextval into v_custID from dual;
insert into customer (customerid, name) values (v_custID, 'AAA');
commit;
for custRow in custCur loop
 dbms_output.put_line(custRow.customerID||' '|| custRow.name); 
end loop;
end;

عدم إنشاء أي

sequence 

أولا إنشاء أي تسلسل دورة ذاكرة التخزين المؤقت.هذه هي بعض الأساسية سبيل المثال

Create Sequence seqtest1
Start With 0             -- This Is Hirarchy Starts With 0
Increment by 1           --Increments by 1
Minvalue 0               --With Minimum value 0
Maxvalue 5               --Maximum Value 5. So The Cycle Of Creation Is Between 0-5
Nocycle                  -- No Cycle Means After 0-5 the Insertion Stopes
Nocache   --The cache Option Specifies How Many Sequence Values Will Be Stored In Memory For Faster Access

لا يمكنك أن تفعل فيها شرط على التسلسل في SQL نتيجة لا يمكن تصفية تسلسل .استخدام إجراءات مثل @APC قال

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