Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

Oracle अनुक्रम बनाना जो अल्फ़ान्यूमेरिक से शुरू होता है

केवल पूर्णांक मान अनुक्रम बनाए जा सकते हैं।

तो कथन होना चाहिए:

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;

चालान आईडी INV00000001and INV00000003are inserted in the चालानtable but the invoice id INV00000002` खो गया है क्योंकि इसे लाने वाला विवरण वापस ले लिया गया था

2) यदि कोई इंस्टेंस क्रैश हो जाता है तो इंस्टेंस के कैश में मौजूद सभी सीक्वेंस खो जाते हैं। आपके उदाहरण में कैश के लिए डिफ़ॉल्ट मान का उपयोग किया जाता है जो कि 20 है। इसलिए यदि इंस्टेंस क्रैश हो जाता है तो अधिकतम 20 अनुक्रम मान खो सकते हैं। एक वैकल्पिक मूल निवासी कीवर्ड NOCYCLE . का उपयोग करना है यदि आप अनुक्रम बनाते हैं लेकिन यह प्रदर्शन दंड लाएगा।

3) यदि आप आरएसी सिस्टम पर हैं तो अनुक्रम संख्या विवरण प्राप्त करने के क्रम का प्रतिनिधित्व नहीं करती है। इसलिए यह संभव है कि पहले स्टेटमेंट को आईडी INV00000021 मिल जाए और दूसरा स्टेटमेंट आईडी प्राप्त करता है INV00000001 यदि दूसरा कथन पहले कथन से भिन्न उदाहरण पर निष्पादित किया जाता है। ऐसा इसलिए है क्योंकि इंस्टेंस ने अपने कैशे में पहले 20 सीक्वेंस नंबर प्राप्त किए और दूसरे इंस्टेंस ने अपने कैश में दूसरे 20 सीक्वेंस नंबर प्राप्त किए। पहला कथन उस उदाहरण पर निष्पादित किया जाता है जिसने दूसरी 20 अनुक्रम संख्याएँ प्राप्त कीं। आप ORDER . का उपयोग कर सकते हैं इससे बचने के लिए कीवर्ड लेकिन यह फिर से प्रदर्शन दंड लाएगा

तो कोई 2 से बच सकता है) और 3) प्रदर्शन दंड की कीमत के लिए लेकिन 2 से बचने का कोई तरीका नहीं है)।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या कर्सर के अंदर रिकॉर्ड प्रकार को कॉल करना संभव है?

  2. 12c . में गतिशील नमूनाकरण मुझे मार रहा है

  3. ग्रिड इंफ्रास्ट्रक्चर को फिर से लिंक करें

  4. Oracle पर ORDER के साथ INSERT करें

  5. पीएल/एसक्यूएल रिकॉर्ड के साथ ओरेकल प्रक्रिया को कॉल करना स्प्रिंग जेडीबीसी से टाइप करें