Oracle PL/SQL रिकॉर्ड्स प्रकार उदाहरण सहित

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

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

  • 🧱 परिभाषा: एक रिकॉर्ड प्रकार एक या अधिक स्तंभों को एक नए डेटा प्रकार में समूहित करता है।
  • 🔑 कीवर्ड: TYPE कीवर्ड कंपाइलर को बताता है कि एक नया डेटा प्रकार बनाया जा रहा है।
  • दो स्तर: डेटाबेस-स्तर का रिकॉर्ड एक संग्रहित ऑब्जेक्ट होता है; सबप्रोग्राम-स्तर का रिकॉर्ड केवल उस सबप्रोग्राम के अंदर ही दिखाई देता है।
  • 🔗 क्षेत्र तक पहुंच: फ़ील्ड तक पहुंचने के लिए डॉट ऑपरेटर का उपयोग करके record_variable.column_name का उपयोग किया जाता है।
  • 📥 स्तंभ-स्तर: एक समय में केवल एक ही फ़ील्ड को मान निर्दिष्ट किए जा सकते हैं।
  • 📦 पंक्ति-स्तर: SELECT INTO स्टेटमेंट का उपयोग करके टेबल की एक पंक्ति से पूरा रिकॉर्ड निकाला जा सकता है।
  • 🧩 रिकॉर्ड के प्रकार: टेबल-आधारित %ROWTYPE, कर्सर-आधारित %ROWTYPE, और प्रोग्रामर-परिभाषित रिकॉर्ड।

Oracle 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 रिकॉर्ड सबसे सुरक्षित विकल्प होता है। कर्सरक्योंकि कॉलम में होने वाला परिवर्तन अगले संकलन में स्वचालित रूप से दर्ज हो जाता है।

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

एक रिकॉर्ड विभिन्न प्रकार के अलग-अलग स्तंभों को एक पंक्ति जैसी संरचना में समूहित करता है। एक संग्रह में एक ही प्रकार के कई तत्व होते हैं जिन्हें सबस्क्रिप्ट द्वारा अनुक्रमित किया जाता है। इन्हें अक्सर संयोजित किया जाता है, जो रिकॉर्ड का संग्रह कहलाता है।

%ROWTYPE एक रिकॉर्ड घोषित करता है जिसके फ़ील्ड स्वचालित रूप से किसी तालिका या कर्सर से मेल खाते हैं। इसका उपयोग तब करें जब रिकॉर्ड को स्रोत के समान होना चाहिए, ताकि कॉलम में परिवर्तन घोषणा को संपादित किए बिना ही प्रतिबिंबित हो जाए।

हां, यदि दोनों रिकॉर्ड एक ही प्रकार के हों। SELECT INTO फ़ंक्शन किसी टेबल की पंक्ति से संपूर्ण रिकॉर्ड को भी भर सकता है, बशर्ते कि सेलेक्ट लिस्ट का क्रम रिकॉर्ड के फ़ील्ड क्रम से मेल खाता हो।

जी हां। एआई किसी टेबल की परिभाषा को पढ़कर उससे मेल खाने वाला TYPE … IS RECORD ब्लॉक बना सकता है, या फिर %ROWTYPE की सिफारिश कर सकता है जहां टेबल से सीधा लिंक होना बेहतर हो। उपयोग करने से पहले डेटा प्रकारों की पुष्टि अवश्य कर लें।

डेटाबेस स्तर का रिकॉर्ड CREATE TYPE कमांड द्वारा बनाया जाता है और डेटाबेस में दिखाई देने वाली ऑब्जेक्ट के रूप में संग्रहीत किया जाता है। सबप्रोग्राम स्तर का रिकॉर्ड एक ब्लॉक के अंदर घोषित किया जाता है और केवल उसी सबप्रोग्राम के भीतर मौजूद होता है।

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