केवल पूर्णांक मान अनुक्रम बनाए जा सकते हैं।
तो कथन होना चाहिए:
CREATE SEQUENCE invoice_nun
START WITH 1
INCREMENT BY 1;
आप प्राप्त मूल्य को एक स्ट्रिंग में बदल सकते हैं और एक उपयुक्त उपसर्ग जोड़ सकते हैं।
select 'INV'||to_char(invoice_nun.nextval,'FM09999999')
from dual;
उचित स्ट्रिंग मान लौटाने वाले अनुक्रम का अनुकरण करने के लिए आप एक फ़ंक्शन बना सकते हैं
create or replace function next_invoice_nun return varchar2
as
begin
return('INV'||to_char(invoice_nun.nextval,'FM09999999') );
end;
/
अब आप कर सकते हैं
select next_invoice_nun
from dual;
ऊपर परिभाषित अनुक्रम कुछ डिफ़ॉल्ट मानों का उपयोग करता है। यह डेटाबेस SQL भाषा संदर्भ में प्रलेखित है। . यह निम्नलिखित कथन के बराबर है
CREATE SEQUENCE invoice_nun
CACHE 20
NOORDER
START WITH 1
INCREMENT BY 1;
आपको निम्न के बारे में पता होना चाहिए:
1) यदि कोई लेन-देन अनुक्रम मान प्राप्त करता है और वापस रोल करता है तो अनुक्रम मान खो जाता है। तो यदि आप निम्न कार्य करते हैं:
-- fetch invoice_id INV00000001
insert into invoices(invoice_id,...) values (next_invoice_nun,...);
commit;
-- fetch invoice_id INV00000002
insert into invoices(invoice_id,...) values (next_invoice_nun,...);
rollback;
-- fetch invoice_id INV00000003
insert into invoices(invoice_id,...) values (next_invoice_nun,...);
commit;
चालान आईडी INV00000001
and
INV00000003are inserted in the
चालानtable but the invoice id
INV00000002` खो गया है क्योंकि इसे लाने वाला विवरण वापस ले लिया गया था
2) यदि कोई इंस्टेंस क्रैश हो जाता है तो इंस्टेंस के कैश में मौजूद सभी सीक्वेंस खो जाते हैं। आपके उदाहरण में कैश के लिए डिफ़ॉल्ट मान का उपयोग किया जाता है जो कि 20 है। इसलिए यदि इंस्टेंस क्रैश हो जाता है तो अधिकतम 20 अनुक्रम मान खो सकते हैं। एक वैकल्पिक मूल निवासी कीवर्ड NOCYCLE
. का उपयोग करना है यदि आप अनुक्रम बनाते हैं लेकिन यह प्रदर्शन दंड लाएगा।
3) यदि आप आरएसी सिस्टम पर हैं तो अनुक्रम संख्या विवरण प्राप्त करने के क्रम का प्रतिनिधित्व नहीं करती है। इसलिए यह संभव है कि पहले स्टेटमेंट को आईडी INV00000021
मिल जाए और दूसरा स्टेटमेंट आईडी प्राप्त करता है INV00000001
यदि दूसरा कथन पहले कथन से भिन्न उदाहरण पर निष्पादित किया जाता है। ऐसा इसलिए है क्योंकि इंस्टेंस ने अपने कैशे में पहले 20 सीक्वेंस नंबर प्राप्त किए और दूसरे इंस्टेंस ने अपने कैश में दूसरे 20 सीक्वेंस नंबर प्राप्त किए। पहला कथन उस उदाहरण पर निष्पादित किया जाता है जिसने दूसरी 20 अनुक्रम संख्याएँ प्राप्त कीं। आप ORDER
. का उपयोग कर सकते हैं इससे बचने के लिए कीवर्ड लेकिन यह फिर से प्रदर्शन दंड लाएगा
तो कोई 2 से बच सकता है) और 3) प्रदर्शन दंड की कीमत के लिए लेकिन 2 से बचने का कोई तरीका नहीं है)।