SAP HANA ट्यूटोरियल: अनुक्रम बनाएँ

⚡ स्मार्ट सारांश

अनुक्रम बनाएं SAP HANA एक डेटाबेस ऑब्जेक्ट को परिभाषित करता है जो स्वचालित रूप से संख्यात्मक मानों की एक क्रमिक सूची उत्पन्न करता है। पैरामीटर जनरेटर के प्रारंभिक मान, वृद्धि, सीमा, चक्रण और कैशिंग व्यवहार को नियंत्रित करते हैं।

  • 🔢 मूल परिभाषा: एक अनुक्रम अपने विनिर्देश में निर्धारित नियमों के अनुसार आरोही या अवरोही क्रम में संख्याएँ उत्पन्न करता है।
  • 🔗 कोई टेबल बाइंडिंग नहीं: अनुक्रम स्वतंत्र वस्तुएं हैं जिनका उपयोग एप्लिकेशन द्वारा किया जाता है, न कि वे किसी तालिका से जुड़े होते हैं।
  • 📍 दो मूल्य: CURRVAL वर्तमान मान लौटाता है और NEXTVAL अनुक्रम को आगे बढ़ाता है और नया मान लौटाता है।
  • मुख्य पैरामीटर: START WITH, INCREMENT BY, MAXVALUE, MINVALUE, CYCLE और CACHE आउटपुट को आकार देते हैं।
  • ♻️ साइकिल चलाना: CYCLE विकल्प सीमा पर नंबरिंग को पुनः आरंभ करता है; NO CYCLE डिफ़ॉल्ट विकल्प है और इसके बजाय एक त्रुटि उत्पन्न करता है।
  • कैशिंग: गति बढ़ाने के लिए CACHE प्रत्येक नोड के लिए संख्याओं का एक ब्लॉक आरक्षित करता है; NO CACHE डिफ़ॉल्ट है।
  • 🔄 रीसेट विकल्प: RESET BY डेटाबेस के पुनः आरंभ होने पर एक सबक्वेरी चलाता है और उसके द्वारा लौटाए गए मान से पुनः शुरू होता है।

अनुक्रम बनाएं SAP HANA

अनुक्रम क्या है?

अनुक्रम एक डेटाबेस ऑब्जेक्ट है जो अनुक्रम विनिर्देश में निर्दिष्ट नियम के अनुसार स्वचालित रूप से संख्यात्मक मानों की बढ़ी हुई सूची उत्पन्न करता है।

उदाहरण के लिए, तालिका के कॉलम (EMPLOYEE_NO) में कर्मचारी संख्या स्वचालित रूप से डालने के लिए, जब तालिका में एक नया रिकॉर्ड डाला जाता है, तो हम अनुक्रम का उपयोग करते हैं।

अनुक्रम मान आरोही या अवरोही क्रम में उत्पन्न होते हैं।

अनुक्रम तालिकाओं से जुड़े नहीं होते हैं; उनका उपयोग एप्लिकेशन द्वारा किया जाता है। अनुक्रम में दो मान होते हैं –

  • CURRVAL - अनुक्रम का वर्तमान मान प्रदान करें।
  • NEXTVAL – अनुक्रम का अगला मान प्रदान करें.

वाक्य - विन्यास

CREATE SEQUENCE <sequence_name> [<sequence_parameter_list>] [RESET BY <subquery>]

वाक्यविन्यास तत्व

तत्व वर्णन
यह अनुक्रम का नाम है।
[ ] यह एक या अधिक अनुक्रम पैरामीटर निर्दिष्ट करता है।
के साथ शुरू यह प्रारंभिक अनुक्रम मान का वर्णन करता है।
वृद्धि द्वारा यह प्रत्येक बार नया अनुक्रम मान उत्पन्न होने पर निर्दिष्ट अंतिम मान से बढ़ाए जाने वाले मान को निर्दिष्ट करता है। डिफ़ॉल्ट 1 है।
अधिकतम मूल्य यह अनुक्रम द्वारा उत्पन्न की जा सकने वाली अधिकतम वैल्यू को निर्दिष्ट करता है। यह -4611686018427387903 और 4611686018427387902 के बीच हो सकता है।
कोई अधिकतम मूल्य नहीं जब NO MAXVALUE निर्दिष्ट किया जाता है, तो आरोही अनुक्रम के लिए अधिकतम मान 4611686018427387903 होगा और अवरोही अनुक्रम के लिए न्यूनतम मान -1 होगा।
न्यूनतम मूल्य / कोई न्यूनतम मूल्य नहीं यह अनुक्रम द्वारा उत्पन्न की जा सकने वाली न्यूनतम वैल्यू को निर्दिष्ट करता है। यह -4611686018427387904 और 4611686018427387902 के बीच हो सकता है। जब NO MINVALUE का उपयोग किया जाता है, तो आरोही अनुक्रम के लिए न्यूनतम मान 1 होता है।
चक्र CYCLE निर्देश यह निर्दिष्ट करता है कि अनुक्रम संख्या अपने अधिकतम या न्यूनतम मान तक पहुँचने के बाद पुनः आरंभ की जाएगी।
कोई चक्र नहीं डिफ़ॉल्ट विकल्प। NO CYCLE निर्देश यह निर्दिष्ट करता है कि अनुक्रम संख्या अपने अधिकतम या न्यूनतम मान तक पहुँचने के बाद पुनः आरंभ नहीं की जाएगी।
कैश कैश का आकार यह निर्दिष्ट करता है कि किसी नोड में अनुक्रम संख्याओं की कौन सी श्रेणी कैश की जाएगी। यह अहस्ताक्षरित पूर्णांक होना चाहिए।
कोई कैश नहीं डिफ़ॉल्ट विकल्प। NO CACHE निर्देश यह निर्दिष्ट करता है कि अनुक्रम संख्या को किसी नोड में कैश नहीं किया जाएगा।
रीसेट करें यह निर्दिष्ट करता है कि डेटाबेस के पुनः आरंभ के दौरान, डेटाबेस स्वचालित रूप से निष्पादित करता है और अनुक्रम मान को लौटाए गए मान के साथ पुनः आरंभ किया जाता है।

उदाहरण -

हम DHK_SCHEMA.EMP_NO नामक एक अनुक्रम बनाएंगे, जो अनुक्रम का उपयोग किए जाने पर प्रत्येक बार +1 से अनुक्रम का वृद्धिशील मान बनाएगा।

अनुक्रम स्क्रिप्ट –

CREATE SEQUENCE DHK_SCHEMA.EMP_NO START WITH 100 INCREMENT BY 1;

यहाँ हम नीचे दिए गए उदाहरण में ऑब्जेक्ट “सीक्वेंस” का उपयोग करके कर्मचारी संख्या के मान को हर बार +1 से बढ़ाएँगे जब चयन क्वेरी निष्पादित की जाएगी। क्वेरी में, “नेक्स्टवैल” का उपयोग सीरियल नंबर जेनरेशन या उसी प्रकार की आवश्यकता के लिए किया जा सकता है।

अनुक्रम का उपयोग –

SELECT DHK_SCHEMA.EMP_NO.nextval FROM DUMMY;

उपरोक्त सेलेक्ट क्वेरी के प्रत्येक निष्पादन के लिए आउटपुट – 100, 101, 102 … और इसी प्रकार आगे भी।

तालिका में अनुक्रम का उपयोग कैसे करें

ऊपर दिया गया उदाहरण एक संख्या लौटाता है लेकिन उसे कहीं भी संग्रहीत नहीं करता है। तीन पैटर्न एक अनुक्रम को वास्तविक डेटा से जोड़ते हैं, और सही विकल्प इस बात पर निर्भर करता है कि एप्लिकेशन को कितना नियंत्रण चाहिए।

1) INSERT में सीधे NEXTVAL को कॉल करें। सबसे स्पष्ट तरीका। एप्लिकेशन तय करता है कि किसी संख्या का उपयोग कब किया जाएगा।

CREATE COLUMN TABLE DHK_SCHEMA.EMPLOYEE (
  EMPLOYEE_NO INTEGER NOT NULL,
  EMP_NAME    NVARCHAR(100),
  PRIMARY KEY (EMPLOYEE_NO)
);

INSERT INTO DHK_SCHEMA.EMPLOYEE
  VALUES (DHK_SCHEMA.EMP_NO.NEXTVAL, 'Anita Sharma');

2) अनुक्रम को कॉलम डिफ़ॉल्ट के रूप में उपयोग करें। यह संख्या तब भी असाइन की जाती है जब इंसर्ट में कॉलम का उल्लेख नहीं होता है, जो उन अनुप्रयोगों के लिए उपयुक्त है जिन्हें अनुक्रम के बारे में जानने के लिए कभी नहीं लिखा गया था।

CREATE COLUMN TABLE DHK_SCHEMA.EMPLOYEE2 (
  EMPLOYEE_NO INTEGER DEFAULT DHK_SCHEMA.EMP_NO.NEXTVAL,
  EMP_NAME    NVARCHAR(100)
);

INSERT INTO DHK_SCHEMA.EMPLOYEE2 (EMP_NAME) VALUES ('Ravi Kumar');

3) अभी जारी किए गए मान को पढ़ें। CURRVAL इस सत्र में लिया गया अंतिम नंबर लौटाता है, जिसके द्वारा एक चाइल्ड रो को अभी-अभी डाली गई पैरेंट रो से जोड़ा जाता है।

SELECT DHK_SCHEMA.EMP_NO.CURRVAL FROM DUMMY;

⚠️ चेतावनी: CURRVAL तब तक त्रुटि के साथ विफल हो जाता है जब तक कि वर्तमान सत्र में NEXTVAL को कम से कम एक बार कॉल नहीं किया जाता है। यह इस सत्र को जारी किया गया मान रिपोर्ट करता है, न कि वैश्विक अधिकतम मान, इसलिए दो सत्रों में एक ही समय में अलग-अलग वर्तमान मान हो सकते हैं।

अनुक्रम बनाम पहचान स्तंभ

SAP HANA एक आइडेंटिटी कॉलम भी प्रदान करता है, जो बिना किसी अलग ऑब्जेक्ट के संख्याएँ उत्पन्न करता है। ये दोनों एक ही समस्या को अलग-अलग तरीके से हल करते हैं।

प्राचल अनुक्रम पहचान स्तंभ
वस्तु प्रकार स्वतंत्र डेटाबेस ऑब्जेक्ट एक तालिका की कॉलम प्रॉपर्टी
टेबलों के बीच साझा किया गया हां, इससे कितनी भी तालिकाएँ डेटा ले सकती हैं। नहीं, यह एक ही स्तंभ से संबंधित है।
डालने से पहले मान दिखाई दे रहा है जी हाँ, नेक्स्टवाल के माध्यम से नहीं, यह इंसर्ट के दौरान उत्पन्न हुआ था।
परिभाषा अनुक्रम बनाएँ डिफ़ॉल्ट रूप से पहचान के रूप में उत्पन्न
के लिए सबसे अच्छा साझा नंबरिंग, पैरेंट और चाइल्ड इन्सर्ट एक टेबल पर एक सरल सरोगेट कुंजी

जब पंक्ति मौजूद होने से पहले संख्या ज्ञात होनी आवश्यक हो, या जब कई तालिकाएँ एक ही क्रमांकन श्रृंखला साझा करती हों, तो अनुक्रम चुनें। व्यापक आवश्यकता के बिना एक साधारण सरोगेट कुंजी के लिए एक पहचान स्तंभ चुनें।

अनुक्रमों का प्रबंधन: परिवर्तन, हटाना और अंतराल

कोई भी क्रम शायद ही कभी अपने मूल रूप में बना रहता है। तीन रखरखाव कार्य बार-बार सामने आते हैं।

व्यवहार में बदलाव लाना। ALTER SEQUENCE मौजूदा अनुक्रम के ड्रॉप के बिना उसकी वृद्धि, सीमा या चक्रण को समायोजित करता है।ping it.RESTART WITH काउंटर को रीसेट करता है, जो कि टेस्ट डेटा रीलोड के बाद सामान्य चरण है।

ALTER SEQUENCE DHK_SCHEMA.EMP_NO RESTART WITH 1000;
ALTER SEQUENCE DHK_SCHEMA.EMP_NO INCREMENT BY 10;
DROP SEQUENCE DHK_SCHEMA.EMP_NO;

कमियों को समझना। अनुक्रम संख्याएँ निरंतर होने की गारंटी नहीं देतीं, और यह उन लोगों को आश्चर्यचकित करता है जो एक निर्बाध ऑडिट ट्रेल की अपेक्षा करते हैं। अंतराल तीन कारणों से दिखाई देते हैं:

  • लेन-देन वापस ले लिए गए। NEXTVAL एक ट्रांजैक्शनल सिस्टम नहीं है। किसी इंसर्ट द्वारा उपयोग किया गया नंबर, जिसे बाद में रोल बैक कर दिया जाता है, कभी भी दोबारा जारी नहीं किया जाता है।
  • कैशिंग। CACHE 100 के साथ एक नोड एक साथ सौ मान आरक्षित कर लेता है। रीस्टार्ट करने पर उस ब्लॉक में जो भी मान अप्रयुक्त रह जाता है, वह समाप्त हो जाता है।
  • समवर्ती सत्र। दो सत्र एक साथ अपनी संख्याओं को इस प्रकार डालते हैं कि किसी को भी निरंतर क्रम दिखाई नहीं देता।

व्यवहारिक नियम यह है कि अनुक्रम को अद्वितीय पहचानकर्ताओं के स्रोत के रूप में माना जाए, न कि पंक्तियों की संख्या गिनने वाले यंत्र के रूप में। जहाँ एक अटूट श्रृंखला कानूनी आवश्यकता है, जैसे कि चालान क्रमांकन, वहाँ इसे डेटाबेस अनुक्रम के बजाय एप्लिकेशन लॉजिक द्वारा अपने स्वयं के नियंत्रणों के साथ उत्पन्न किया जाना चाहिए।

जो मौजूद है, उसे खोजना। सिस्टम व्यू SEQUENCES प्रत्येक अनुक्रम को उसके वर्तमान मान के साथ सूचीबद्ध करता है, जो स्कीमा का ऑडिट करने का सबसे तेज़ तरीका है। संबंधित सिंटैक्स के बारे में विस्तार से बताया गया है। SAP हाना एसक्यूएल और कॉलम परिभाषाओं में SAP हाना डेटा प्रकार.

अक्सर पूछे जाने वाले प्रश्न

रोलबैक किए गए लेनदेन, पुनः आरंभ करने पर खो गए कैश्ड ब्लॉक और समवर्ती सत्र, ये सभी अंतराल पैदा करते हैं। एक क्रम विशिष्टता की गारंटी देता है, मूल्यों की निरंतर श्रृंखला कभी नहीं।

जी हां। एक अनुक्रम किसी भी तालिका से स्वतंत्र होता है, इसलिए कई तालिकाएँ इससे मान ले सकती हैं। यह तब उपयोगी होता है जब पहचानकर्ताओं को प्रत्येक तालिका के लिए अलग-अलग होने के बजाय संपूर्ण स्कीमा में अद्वितीय होना आवश्यक हो।

जी हां। इंसर्ट थ्रूपुट का विश्लेषण यह दर्शाता है कि एक नोड रीस्टार्ट के बीच कितने मानों का उपभोग करता है, जो कैशिंग से प्राप्त गति लाभ और इसके द्वारा उत्पन्न अंतराल के आकार के बीच संतुलन स्थापित करता है।

हां। वर्तमान मूल्यों की तुलना अधिकतम मूल्य और खपत दर से करने पर कमी का अनुमान लगाया जा सकता है, इसलिए उत्पादन में इंसर्ट के विफल होने से पहले अनुक्रम को चौड़ा किया जाता है।

क्योंकि वर्तमान सत्र में NEXTVAL को कॉल नहीं किया गया है। CURRVAL इस सत्र को जारी किए गए मान की रिपोर्ट करता है, इसलिए जब तक कोई मान लिया नहीं जाता तब तक इसके पास रिपोर्ट करने के लिए कुछ नहीं है।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: