Oracle PL/SQL रिकॉर्ड्स प्रकार उदाहरण सहित
⚡ स्मार्ट सारांश
PL/SQL रिकॉर्ड टाइप एक जटिल डेटा टाइप है जो कई कॉलमों को, जिनमें से प्रत्येक का अपना नाम और डेटा टाइप होता है, एक नए टाइप में समूहित करता है। एक रिकॉर्ड को डेटाबेस स्तर पर एक संग्रहीत ऑब्जेक्ट के रूप में या एक सबप्रोग्राम के अंदर परिभाषित किया जा सकता है, और इसके फ़ील्ड को डॉट ऑपरेटर का उपयोग करके एक्सेस किया जाता है।

रिकॉर्ड टाइप क्या है?
रिकॉर्ड टाइप एक जटिल डेटा टाइप है जो प्रोग्रामर को वांछित कॉलम संरचना के साथ एक नया डेटा टाइप बनाने की अनुमति देता है। इसकी मुख्य विशेषताएं इस प्रकार हैं:
- यह एक या अधिक कॉलम को समूहित करके एक नया डेटा प्रकार बनाता है।
- इनमें से प्रत्येक कॉलम का अपना नाम और डेटा प्रकार होता है।
- एक रिकॉर्ड प्रकार डेटा को कई स्तंभों वाले एकल रिकॉर्ड के रूप में स्वीकार कर सकता है, या यह किसी रिकॉर्ड के किसी एक विशेष स्तंभ के लिए मान स्वीकार कर सकता है।
- रिकॉर्ड टाइप एक नया डेटा टाइप होता है। एक बार बन जाने के बाद, इसे एक नए डेटा टाइप के रूप में स्टोर किया जाता है और प्रोग्राम में वेरिएबल घोषित करने के लिए इसका उपयोग किया जा सकता है।
- यह कीवर्ड का उपयोग करता है 'प्रकार' कंपाइलर को यह निर्देश देने के लिए कि एक नया डेटा प्रकार बनाया जा रहा है।
- इसे बनाया जा सकता है डेटाबेस स्तरइसे डेटाबेस ऑब्जेक्ट के रूप में संग्रहीत किया जाता है और पूरे डेटाबेस में या डेटाबेस में उपयोग किया जाता है। उपकार्यक्रम स्तरजो केवल सबप्रोग्राम के अंदर ही दिखाई देता है।
- टेबल कॉलम के लिए डेटाबेस-स्तर का रिकॉर्ड प्रकार भी घोषित किया जा सकता है, ताकि एक ही कॉलम में जटिल डेटा रखा जा सके।
- डेटा को एक्सेस करने के लिए, पहले वेरिएबल का नाम, फिर पीरियड ऑपरेटर (.), और फिर कॉलम का नाम, जैसे ' का उपयोग किया जाता है। . '.
रिकॉर्ड प्रकार घोषित करने का सिंटैक्स
डेटाबेस स्तर पर घोषणा के लिए सिंटैक्स:
CREATE TYPE <type_name_db> IS RECORD ( <column 1> <datatype>, );
पहले वाक्यविन्यास में, 'CREATE TYPE' कीवर्ड कंपाइलर को निर्दिष्ट कॉलम के साथ "type_name_db" नामक रिकॉर्ड प्रकार को डेटाबेस ऑब्जेक्ट के रूप में बनाने का निर्देश देता है। यह एक अलग कथन के रूप में दिया गया है, किसी ब्लॉक के अंदर नहीं।
सबप्रोग्राम स्तर पर घोषणा के लिए सिंटैक्स:
DECLARE TYPE <type_name> IS RECORD ( <column1> <datatype>, ); BEGIN <execution_section>; END;
इस सिंटैक्स में, हम सबप्रोग्राम के अंदर ही "type_name" नामक रिकॉर्ड प्रकार बनाते हैं। दोनों विधियों में, कॉलम और डेटा प्रकार को परिभाषित करने का तरीका समान है।
उदाहरण 1: डेटाबेस ऑब्जेक्ट के रूप में रिकॉर्ड प्रकार
इस प्रोग्राम में हम डेटाबेस ऑब्जेक्ट के रूप में रिकॉर्ड टाइप बनाना सीखेंगे। हम चार कॉलम वाला 'emp_det' रिकॉर्ड टाइप बनाएंगे। कॉलम और उनके डेटा टाइप इस प्रकार हैं:
- EMP_संख्या (संख्या)
- EMP_नाम (VARCHAR2 (150))
- प्रबंधक (संख्या)
- वेतन (संख्या)
CREATE TYPE emp_det IS OBJECT ( EMP_NO NUMBER, EMP_NAME VARCHAR2(150), MANAGER NUMBER, SALARY NUMBER ); /
आउटपुट:
Type created
Code व्याख्या
- उपरोक्त कोड emp_det प्रकार को डेटाबेस ऑब्जेक्ट के रूप में बनाता है।
- इसमें परिभाषित अनुसार 4 कॉलम हैं: emp_no, emp_name, manager और salary।
- अब 'emp_det' अन्य सभी के समान है। डाटा प्रकार (जैसे NUMBER या VARCHAR2) और यह पूरे डेटाबेस में दिखाई देता है। इसलिए, इस प्रकार के वेरिएबल को घोषित करने के लिए डेटाबेस में कहीं भी इसका उपयोग किया जा सकता है।
उदाहरण 2: सबप्रोग्राम स्तर, कॉलम-स्तरीय एक्सेस
इस उदाहरण में, हम देखेंगे कि सबप्रोग्राम स्तर पर रिकॉर्ड प्रकार कैसे बनाया जाता है और कॉलम के आधार पर उसमें मान कैसे भरे और प्राप्त किए जाते हैं। हम सबप्रोग्राम स्तर पर 'emp_det' रिकॉर्ड प्रकार बनाते हैं और इसका उपयोग डेटा भरने और प्रदर्शित करने के लिए करते हैं।
DECLARE TYPE emp_det IS RECORD ( EMP_NO NUMBER, EMP_NAME VARCHAR2(150), MANAGER NUMBER, SALARY NUMBER ); guru99_emp_rec emp_det; BEGIN guru99_emp_rec.emp_no:= 1001; guru99_emp_rec.emp_name:= 'XXX'; guru99_emp_rec.manager:= 1000; guru99_emp_rec.salary:= 10000; dbms_output.put_line('Employee Detail'); dbms_output.put_line ('Employee Number: '||guru99_emp_rec.emp_no); dbms_output.put_line ('Employee Name: '||guru99_emp_rec.emp_name); dbms_output.put_line ('Employee Salary: ' ||guru99_emp_rec.salary); dbms_output.put_line ('Employee Manager Number: '||guru99_emp_rec.manager); END; /
आउटपुट:
Employee Detail Employee Number: 1001 Employee Name: XXX Employee Salary: 10000 Employee Manager Number: 1000
Code व्याख्या
- Code पंक्ति 2-8: रिकॉर्ड प्रकार 'emp_det' को emp_no, emp_name, manager और salary कॉलम के साथ घोषित किया गया है, जिनका डेटा प्रकार NUMBER, VARCHAR2, NUMBER और NUMBER है।
- Code पंक्ति 9: guru99_emp_rec वेरिएबल को 'emp_det' डेटा प्रकार के रूप में घोषित किया गया है। परिवर्तनशील इसमें एक ऐसा मान हो सकता है जिसमें चारों फ़ील्ड शामिल हों।
- Code पंक्ति 11: 'guru99_emp_rec' के 'emp_no' फ़ील्ड को 1001 मान से पॉपुलेट किया जा रहा है।
- Code पंक्ति 12: 'emp_name' फ़ील्ड में XXX मान भरा जा रहा है।
- Code पंक्ति 13: 'मैनेजर' फ़ील्ड में 1000 मान भरा जा रहा है।
- Code पंक्ति 14: 'वेतन' फ़ील्ड में 10000 मान भरना।
- Code पंक्ति 15-19: आउटपुट में 'guru99_emp_rec' का मान प्रदर्शित किया जा रहा है।
उदाहरण 3: सबप्रोग्राम स्तर, पंक्ति-स्तर एक्सेस
इस उदाहरण में, हम देखते हैं कि सबप्रोग्राम स्तर पर रिकॉर्ड प्रकार कैसे बनाया जाता है और पंक्ति स्तर पर इसे कैसे भरा जाता है। हम सबप्रोग्राम स्तर पर 'emp_det' रिकॉर्ड प्रकार बनाते हैं और इसका उपयोग डेटा भरने और प्रदर्शित करने के लिए करते हैं।
DECLARE TYPE emp_det IS RECORD ( EMP_NO NUMBER, EMP_NAME VARCHAR2(150), MANAGER NUMBER, SALARY NUMBER ); guru99_emp_rec emp_det; BEGIN INSERT INTO emp (emp_no, emp_name, salary, manager) VALUES (1002,'YYY',15000,1000); COMMIT; SELECT emp_no, emp_name, salary, manager INTO guru99_emp_rec FROM emp WHERE emp_no=1002; dbms_output.put_line ('Employee Detail'); dbms_output.put_line ('Employee Number: '||guru99_emp_rec.emp_no); dbms_output.put_line ('Employee Name: '||guru99_emp_rec.emp_name); dbms_output.put_line ('Employee Salary: '||guru99_emp_rec.salary); dbms_output.put_line ('Employee Manager Number: '||guru99_emp_rec.manager); END; /
Code व्याख्या
- Code पंक्ति 2-8: रिकॉर्ड प्रकार 'emp_det' को emp_no, emp_name, manager और salary कॉलम के साथ घोषित किया गया है, जिनका डेटा प्रकार NUMBER, VARCHAR2, NUMBER और NUMBER है।
- Code पंक्ति 9: guru99_emp_rec वेरिएबल को 'emp_det' डेटा प्रकार के रूप में घोषित किया गया है और यह चारों फ़ील्ड को धारण कर सकता है।
- Code पंक्ति 11: emp टेबल में emp_no के रूप में 1002, emp_name के रूप में YYY, salary के रूप में 15000 और manager number के रूप में 1000 मान दर्ज किए जा रहे हैं।
- Code पंक्ति 12: सम्मिलित लेनदेन प्रतिबद्ध करना.
- Code पंक्ति 13: कर्मचारी संख्या 1002 के लिए चयन क्वेरी से पंक्ति स्तर पर 'guru99_emp_rec' चर को पॉप्युलेट करना।
- Code पंक्ति 15-19: आउटपुट में 'guru99_emp_rec' का मान प्रदर्शित किया जा रहा है।
आउटपुट:
Employee Detail Employee Number: 1002 Employee Name: YYY Employee Salary: 1000 Employee Manager Number: 15000
नोट: किसी रिकॉर्ड प्रकार को उसके मान को किसी भी आउटपुट मोड में रीडायरेक्ट करते समय केवल कॉलम स्तर पर ही एक्सेस किया जा सकता है। ध्यान दें कि इस उदाहरण में SELECT सूची का क्रम रिकॉर्ड फ़ील्ड के क्रम से मेल नहीं खाता है, यही कारण है कि आउटपुट में वेतन और प्रबंधक के मान आपस में बदले हुए दिखाई देते हैं।
PL/SQL रिकॉर्ड के प्रकार
ऊपर दिखाए गए प्रोग्रामर-परिभाषित रिकॉर्ड के अलावा, Oracle यह दो एंकर किए गए रिकॉर्ड प्रकार प्रदान करता है जो अपनी संरचना को स्वचालित रूप से कॉपी करते हैं। इनका उपयोग करने से कॉलम को दोबारा घोषित करने की आवश्यकता नहीं होती है और रिकॉर्ड उस टेबल या कर्सर के अनुरूप बना रहता है जिस पर वह आधारित है।
| रिकॉर्ड प्रकार | घोषित किया गया | संरचना से आती है |
|---|---|---|
| तालिका-आधारित रिकॉर्ड | टेबल_नाम%पंक्तिप्रकार | एक तालिका के सभी स्तंभ |
| कर्सर-आधारित रिकॉर्ड | कर्सर_नाम%पंक्तिप्रकार | कर्सर की चयन सूची |
| प्रोग्रामर-परिभाषित रिकॉर्ड | प्रकार … रिकॉर्ड है | कॉलम जिन्हें आप हाथ से सूचीबद्ध करते हैं |
जब आकृति को किसी तालिका या प्रारूप का अनुसरण करना हो, तो %ROWTYPE रिकॉर्ड सबसे सुरक्षित विकल्प होता है। कर्सरक्योंकि कॉलम में होने वाला परिवर्तन अगले संकलन में स्वचालित रूप से दर्ज हो जाता है।




