SAP ABAP आंतरिक तालिका: बनाएँ, पढ़ें, भरें, कॉपी करें और हटाएं

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

SAP ABAP इंटरनल टेबल ऑब्जेक्ट्स एक प्रोग्राम के भीतर गतिशील उपयोग के लिए एक निश्चित संरचना से डेटा संग्रहीत करते हैं। यह पृष्ठ वर्क एरिया, हेडर लाइन, चार निर्माण विधियों और टेबल पंक्तियों को भरने, कॉपी करने, पढ़ने और हटाने वाले कथनों की व्याख्या करता है।

  • ???? मूल परिभाषा: एक आंतरिक तालिका मुख्य मेमोरी में समान संरचना वाली पंक्तियों को संग्रहीत करती है, जिसका उपयोग अक्सर डेटाबेस तालिका से पढ़े गए डेटा को प्रारूपित करने के लिए किया जाता है।
  • 🧾 कार्यक्षेत्र भूमिका: वर्क एरिया एक ही पंक्ति होती है जिसका फॉर्मेट टेबल के समान होता है, और यह टेबल को एक-एक पंक्ति करके प्रोसेस करता है।
  • शीर्षक पंक्ति: हेडर लाइन वाली टेबल को एक अंतर्निहित कार्य क्षेत्र प्राप्त होता है, इसलिए पंक्तियों को बिना किसी का नाम लिए सीधे डाला या पढ़ा जा सकता है।
  • सृजन की चार विधियाँ: TYPES स्टेटमेंट, किसी मौजूदा टेबल का संदर्भ, किसी मौजूदा संरचना का संदर्भ, या OCCURS के साथ घोषित एक नई संरचना।
  • आबाद करें: APPEND एक पंक्ति जोड़ता है, COLLECT डुप्लिकेट कुंजी के लिए संख्यात्मक फ़ील्ड को एकत्रित करता है, और INSERT एक चयनित इंडेक्स पर एक पंक्ति रखता है।
  • 🔍 पढ़ें और कॉपी करें: LOOP AT प्रत्येक पंक्ति को पढ़ता है, READ TABLE इंडेक्स द्वारा एक पंक्ति को पढ़ता है, और MOVE या बराबर का चिह्न पूरी तालिका की प्रतिलिपि बनाता है।
  • हटाएँ: लूप के अंदर DELETE कमांड वर्तमान पंक्ति को हटाता है, और DELETE … INDEX कमांड किसी ज्ञात स्थिति पर स्थित पंक्ति को हटाता है।

SAP ABAP आंतरिक तालिकाएँ

आंतरिक तालिका क्या है?

आंतरिक तालिका ABAP में गतिशील उपयोग के लिए एक निश्चित संरचना से डेटा प्राप्त करने के लिए उपयोग किया जाता है। आंतरिक तालिका में प्रत्येक पंक्ति में समान फ़ील्ड संरचना होती है। आंतरिक तालिकाओं का मुख्य उपयोग किसी प्रोग्राम के भीतर डेटाबेस तालिका से डेटा संग्रहीत करने और उसे स्वरूपित करने के लिए होता है।

एक आंतरिक मेज हमेशा कार्यक्षेत्र के साथ मिलकर काम करती है, इसलिए उस अवधारणा पर आगे चर्चा की जाएगी।

कार्यक्षेत्र क्या होता है?

कार्य क्षेत्र डेटा की एकल पंक्तियाँ होती हैं। इनका प्रारूप आंतरिक तालिकाओं के प्रारूप के समान होना चाहिए। इसका उपयोग आंतरिक तालिका में डेटा को एक-एक पंक्ति करके संसाधित करने के लिए किया जाता है।

आंतरिक टेबल और कार्य क्षेत्र में क्या अंतर है?

एक तस्वीर बहुत कुछ कहती है

आंतरिक टेबल और कार्य क्षेत्र के बीच अंतर

चित्र में कई पंक्तियों वाली तालिका दिखाई गई है, जबकि कार्यक्षेत्र में केवल वर्तमान में संसाधित हो रही पंक्ति ही है। यह कार्यक्षेत्र सिस्टम द्वारा बनाया गया है या डेवलपर द्वारा, यह नीचे वर्णित तालिका के प्रकार पर निर्भर करता है।

आंतरिक तालिकाओं के प्रकार

आंतरिक तालिकाएं दो प्रकार की होती हैं।

  1. हेडर लाइन के साथ आंतरिक तालिकाएँ
  2. हेडर लाइन के बिना आंतरिक तालिकाएँ.

हेडर लाइन के साथ आंतरिक तालिकाएँ

  • यहां सिस्टम स्वचालित रूप से कार्य क्षेत्र बनाता है।
  • कार्य क्षेत्र का डेटा प्रकार आंतरिक तालिका के समान है।
  • इस कार्य क्षेत्र को हेडर लाइन कहा जाता है।
  • यहीं पर टेबल की सामग्री पर सभी परिवर्तन या कोई भी कार्रवाई की जाती है। इसके परिणामस्वरूप, रिकॉर्ड को सीधे टेबल में डाला जा सकता है या आंतरिक टेबल से सीधे एक्सेस किया जा सकता है।

हेडर लाइन के बिना आंतरिक तालिकाएँ :

  • यहां तालिका से संबद्ध कोई कार्य क्षेत्र नहीं है।
  • जब हमें ऐसी तालिकाओं तक पहुंचने की आवश्यकता होती है तो कार्य क्षेत्र को स्पष्ट रूप से निर्दिष्ट किया जाना चाहिए।
  • इसलिए इन तालिकाओं तक सीधे नहीं पहुंचा जा सकता।

💡टिप: हेडर लाइन वाली टेबल में टेबल और उसके वर्क एरिया का नाम एक ही होता है, जिससे कोड अस्पष्ट हो जाता है। नए प्रोग्रामों में हेडर लाइन के बिना टेबल घोषित करनी चाहिए और एक स्पष्ट वर्क एरिया निर्दिष्ट करना चाहिए।

मानक, क्रमबद्ध और हैश किए गए आंतरिक तालिकाएँ

हेडर लाइन के अंतर के अलावा, प्रत्येक आंतरिक तालिका में एक टेबल प्रकार भी होता है जो यह निर्धारित करता है कि पंक्ति कैसे खोजी जाएगी। यह प्रकार TYPE STANDARD TABLE, TYPE SORTED TABLE, या TYPE HASHED TABLE जोड़ के साथ चुना जाता है, और इसका रनटाइम पर सीधा प्रभाव पड़ता है।

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

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

आंतरिक तालिकाएँ बनाना

आंतरिक तालिका बनाने के कई तरीके हैं। आइए एक-एक करके उन पर नज़र डालें-

1.टाइप स्टेटमेंट का उपयोग करके

अब हम TYPE स्टेटमेंट का उपयोग करके एक इंटरनल टेबल itab बनाते हैं।

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

Types : begin of line,

column1 type I,

column2 type I,

end of line.

उदाहरण:

TYPES : begin of line,

empno		type I,

empname(20)   	type c	,

end of line.

TYPES कथन परिभाषित अनुसार एक संरचना रेखा बनाता है।

वास्तव में एक आंतरिक तालिका itab बनाने के लिए निम्नलिखित कमांड का उपयोग करें-

Data itab type line occurs 10.

लाइन की संरचना के साथ एक आंतरिक तालिका itab बनाई जाती है। आंतरिक तालिका की संरचना की घोषणा करने के अलावा, OCCURS क्लॉज़ यह भी परिभाषित करता है कि मुख्य संग्रहण में कितनी तालिका प्रविष्टियाँ रखी जाती हैं (इस मामले में 10)। अतिरिक्त रिकॉर्ड पेजिंग क्षेत्र में लिखे जाते हैं और प्रदर्शन को प्रभावित कर सकते हैं

2.किसी अन्य तालिका का संदर्भ देकर

आप किसी मौजूदा टेबल का संदर्भ लेकर एक आंतरिक टेबल बना सकते हैं। मौजूदा टेबल एक मानक टेबल हो सकती है। SAP तालिका, Z तालिका या कोई अन्य आंतरिक तालिका।

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

Data <f> <type> [with header line].

उदाहरण-

DATA itab TYPE line OCCURS 10 with header line.

यहाँ एक आंतरिक तालिका itab बनाई गई है, जो हेडर लाइन के साथ लाइन प्रकार की है। कृपया ध्यान दें कि “हेडर लाइन के साथ” वैकल्पिक है।

3.मौजूदा संरचना का संदर्भ देकर

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

Data	<f> LIKE <struct> occurs n [with header line].

उदाहरण-

DATA itab LIKE sline OCCURS 10.

यहां itab नाम की एक टेबल बनाई गई है जिसकी संरचना sline टेबल के समान है।

4.एक नई संरचना बनाकर

आइए अब हम अपनी खुद की संरचना के साथ एक आंतरिक तालिका बनाएं। यहाँ तालिका एक हेडर लाइन के साथ बनाई गई है, डिफ़ॉल्ट रूप से.

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

Data : Begin of <f> occurs <n>,

<component declaration>,

................................,

End of <f>.

उदाहरण -

Data : Begin of itab occurs 10,

column1       type I,

column2(4)  type C,

column3      like  mara-ernam,

End of itab.

आंतरिक तालिका itab बनाई गई है

एक खाली टेबल का कोई खास उपयोग नहीं होता, इसलिए अगले भाग में इसे पंक्तियों से भर दिया जाता है।

आंतरिक तालिकाओं को भरना

अब जबकि हमने सफलतापूर्वक कुछ आंतरिक तालिकाएँ बना ली हैं, आइए देखें कि हम उन्हें कुछ रिकॉर्ड से कैसे भरते हैं। तालिकाओं को भरने के लिए कई तरीके उपलब्ध हैं

1.डेटा को लाइन दर लाइन जोड़ें

उपलब्ध पहली विधि APPEND कथन का उपयोग है।

APPEND कथन का उपयोग करके हम या तो किसी अन्य कार्य क्षेत्र से एक पंक्ति को आंतरिक तालिका में जोड़ सकते हैं या हम आंतरिक तालिका में एक प्रारंभिक पंक्ति जोड़ सकते हैं।

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

APPEND [<wa> TO / INITIAL LINE TO] <itable>.

यहाँ कार्य क्षेत्र या प्रारंभिक पंक्ति आंतरिक तालिका में जोड़ दी जाती है .

सिस्टम वेरिएबल SY-TABIX में संलग्न पंक्ति का सूचकांक शामिल होता है।

उदाहरण:

Data: Begin of itab occurs 10,

col1 type C,

col2 type I,

end of itab.

Append initial line to itab.

परिणाम : ' ' '0'

Initial lines फ़ंक्शन टेबल में एक पंक्ति जोड़ता है जिसे उसके प्रकार के अनुसार सही मान से इनिशियलाइज़ किया जाता है। यहाँ, col1 एक कैरेक्टर है और col2 एक पूर्णांक है। फिर APPEND initial line फ़ंक्शन कॉलम के डेटा प्रकार के अनुसार एक पंक्ति जोड़ता है, यानी col1 के लिए स्पेस और col2 के लिए 0।

2. COLLECT कथन का उपयोग करना

COLLECT कथन का दूसरा रूप है जिसका उपयोग आंतरिक तालिकाओं को पॉपुलेट करने के लिए किया जाता है। आम तौर पर COLLECT का उपयोग अद्वितीय मानक कुंजी के साथ आंतरिक तालिका में लाइनें डालने के दौरान किया जाता है।

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

COLLECT [<wa> INTO] <itable>.

हेडर लाइन वाली तालिकाओं के मामले में, INTO विकल्प को छोड़ दिया जाता है। मान लीजिए कि पहले से ही एक प्रविष्टि है जिसमें एक कुंजी है जिसे आप जोड़ने का प्रयास कर रहे हैं, तो तालिका में एक नई पंक्ति नहीं जोड़ी जाती है, लेकिन दोनों प्रविष्टियों के संख्यात्मक क्षेत्र जोड़े जाते हैं और कुंजी के अनुरूप केवल एक प्रविष्टि मौजूद होती है। SY-TABIX का मान मूल प्रविष्टि की पंक्ति में बदल दिया जाता है। अन्यथा COLLECT APPEND के समान कार्य करता है और SY-TABIX में संसाधित पंक्ति का सूचकांक होता है।

3. INSERT स्टेटमेंट का उपयोग करना

INSERT कथन आंतरिक तालिका में एक पंक्ति/कार्य क्षेत्र जोड़ता है। आप INSERT कथन के साथ INDEX क्लॉज़ का उपयोग करके उस स्थान को निर्दिष्ट कर सकते हैं जहाँ नई पंक्ति जोड़ी जानी है।

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

INSERT [<wa> INTO / INITIAL LINE INTO] <itable> [index <idx>].

यहां, कार्य क्षेत्र या प्रारंभिक LINE आंतरिक तालिका में डाला गया है सूचकांक पर .

आंतरिक तालिकाओं की प्रतिलिपि बनाना

APPEND फ़ंक्शन का उपयोग करके एक आंतरिक तालिका की सामग्री को दूसरी आंतरिक तालिका में कॉपी किया जा सकता है। LINES या INSERT LINES स्टेटमेंट। इससे भी सरल तरीका यह है कि आप निम्नलिखित में से किसी भी सिंटैक्स का उपयोग करें।

MOVE  <itab1> To <itab2>.

OR

<itab1> = <itab2>.

ये ITAB1 की सामग्री को ITAB2 में कॉपी करते हैं। हेडर लाइन वाली आंतरिक तालिकाओं के मामले में हमें कार्य क्षेत्र से अलग करने के लिए [] का उपयोग करना होगा। इसलिए, हेडर लाइन वाली आंतरिक तालिकाओं की सामग्री को कॉपी करने के लिए सिंटैक्स बन जाता है,

itab1[] = itab2[].

आंतरिक तालिकाएँ पढ़ें

अब हम आंतरिक तालिकाओं के निर्माण और उनमें डेटा भरने से परिचित हो चुके हैं। अब हम देखेंगे कि आंतरिक तालिकाओं से डेटा का उपयोग कैसे किया जाता है या उसे कैसे प्राप्त किया जाता है।

1. लूप-एंडलूप का उपयोग करना

आंतरिक तालिका तक पहुंचने या पढ़ने का एक तरीका LOOP-ENDLOOP का उपयोग करना है।

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

LOOP AT <itable> [INTO <wa>]

...................................

ENDLOOP.

यहाँ जब आप LOOP AT ITABLE कहते हैं, तो आंतरिक तालिका ITABLE को लाइन दर लाइन पढ़ा जाता है। आप LOOP-ENDLOOP संरचना के किसी भी भाग के दौरान उस पंक्ति के लिए स्तंभों के मानों तक पहुँच सकते हैं। SY-SUBRC का मान इस प्रकार सेट किया गया है 0, भले ही केवल एक रिकॉर्ड पढ़ा गया हो.

2. READ का उपयोग करना

आंतरिक तालिका को पढ़ने की दूसरी विधि READ कथन का उपयोग करना है।

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

READ TABLE <itable> [INTO <wa>] INDEX <idx>.

यह कथन वर्तमान पंक्ति या अनुक्रमणिका द्वारा निर्दिष्ट पंक्तियों को पढ़ता है। SY-TABIX का मान पढ़ी गई पंक्ति का सूचकांक है। यदि निर्दिष्ट सूचकांक वाली प्रविष्टि मिलती है, तो SY-SUBRC का मान 0 पर सेट हो जाता है। यदि निर्दिष्ट सूचकांक 0 से कम है, तो रन-टाइम त्रुटि उत्पन्न होती है। यदि निर्दिष्ट सूचकांक तालिका के आकार से अधिक है, तो SY-SUBRC का मान 4 पर सेट हो जाता है।

⚠️ चेतावनी: READ TABLE … INDEX 0 एक रनटाइम त्रुटि उत्पन्न करता है, इसलिए स्टेटमेंट चलने से पहले रनटाइम पर गणना किए गए इंडेक्स की जांच की जानी चाहिए।

आंतरिक तालिकाएँ हटाना

आंतरिक तालिका से पंक्तियों को हटाने के कई तरीके हैं।

1.लूप में लाइनों को हटाना।

यह लाइनों को हटाने का सबसे सरल तरीका है।

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

DELETE <ITABLE>.

यह कथन केवल लूप के भीतर ही काम करता है। यह वर्तमान लाइन को हटा देता है। आप लूप में मौजूद लाइनों को सशर्त रूप से जोड़कर हटा सकते हैं कहां कारण.

2.इंडेक्स का उपयोग करके पंक्तियों को हटाना।

इसका उपयोग किसी भी ज्ञात सूचकांक पर आंतरिक तालिका से एक पंक्ति को हटाने के लिए किया जाता है।

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

DELETE <ITABLE> INDEX <IDX>.

सूचकांक वाली रेखा हटा दिया गया है। अगली पंक्ति का सूचकांक 1 से घटाया गया है।

3. डुप्लिकेट पंक्तियों को हटाना।

मुख्य फ़ील्ड के आधार पर तालिका को क्रमबद्ध करने के बाद डुप्लिकेट पंक्तियों को हटा दिया जाता है।

SORT itab BY col1.

DELETE ADJACENT DUPLICATES FROM itab COMPARING col1.

केवल आसन्न पंक्तियों की तुलना की जाती है, इसीलिए SORT स्टेटमेंट को पहले चलाना आवश्यक है। टेबल को पूरी तरह से खाली करने के लिए, CLEAR itab[] या REFRESH itab का उपयोग करें।

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

CLEAR itab केवल हेडर लाइन को खाली करता है, और CLEAR itab[] बॉडी को खाली करता है। REFRESH हमेशा बॉडी को खाली करता है लेकिन मेमोरी को आरक्षित रखता है। FREE बॉडी को खाली करता है और मेमोरी को भी मुक्त करता है।

SY-TABIX में वर्तमान में प्रोसेस हो रही इंटरनल टेबल की पंक्ति संख्या होती है। SY-INDEX में DO या WHILE लूप का पास नंबर होता है। हैश्ड टेबल में कोई इंडेक्स नहीं होता, इसलिए SY-TABIX का मान शून्य होता है।

LOOP AT itab ASSIGNING a field symbol हर पंक्ति को वर्क एरिया में कॉपी करने से बचता है, इसलिए यह बड़ी तालिकाओं पर तेज़ी से चलता है और MODIFY स्टेटमेंट के बिना पंक्ति को उसी स्थान पर बदलने की अनुमति देता है।

जी हां। ABAP डेवलपमेंट टूल्स में AI असिस्टेंट OCCURS और हेडर लाइन डिक्लेरेशन को TYPE STANDARD TABLE OF में स्पष्ट वर्क एरिया के साथ फिर से लिखते हैं, और वे उन स्टेटमेंट्स को चिह्नित करते हैं जो हेडर लाइन गायब होने पर टूट जाते हैं।

एआई परफॉर्मेंस एडवाइजर यह जांच करते हैं कि किसी टेबल को कैसे भरा और पढ़ा जाता है, फिर जब लीनियर सर्च रनटाइम पर हावी होता है तो सॉर्टेड या हैश्ड टेबल की सिफारिश करते हैं। इस सिफारिश की पुष्टि की जाती है। tracलेनदेन SAT में e।

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