Oracle PL/SQL सम्मिलित करें, अद्यतन करें, हटाएं और चयन करें [उदाहरण]

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

SQL कथनों के भीतर Oracle PL/SQL डेटा हेरफेर के सभी कार्यों को संभालता है, जिससे ब्लॉक सीधे पंक्तियों को सम्मिलित, अद्यतन, हटा और चयनित कर सकता है। INSERT, UPDATE, DELETE और SELECT INTO कमांड डेटाबेस के भीतर डेटा को स्थानांतरित और पुनर्प्राप्त करते हैं।

  • ⚙️ डीएमएल कमांड: INSERT, UPDATE, DELETE और SELECT INTO कमांड PL/SQL ब्लॉक के अंदर डेटा हेरफेर के सभी कार्यों को अंजाम देते हैं।
  • डेटा सम्मिलन: INSERT INTO फ़ंक्शन स्पष्ट VALUES से या SELECT का उपयोग करके सीधे किसी अन्य तालिका से पंक्तियाँ जोड़ता है।
  • 🔄 डेटा अद्यतन: SET के साथ UPDATE कॉलम के मानों को बदलता है, जबकि एक वैकल्पिक WHERE क्लॉज़ प्रभावित पंक्तियों को सीमित करता है।
  • डेटा हटाना: DELETE कमांड मेल खाने वाले रिकॉर्ड को हटा देता है, और WHERE क्लॉज़ को छोड़ देने से पूरी टेबल खाली हो जाती है।
  • 🎯 इसमें चुनें: SELECT INTO को ठीक एक पंक्ति लौटानी चाहिए, या Oracle इससे NO_DATA_FOUND या TOO_MANY_ROWS त्रुटि उत्पन्न होती है।
  • 🤖 एआई सहायता: GitHub Copilot जैसे AI सहायक DML ब्लॉक का मसौदा तैयार करते हैं और WHERE या COMMIT के छूट जाने की स्थिति को चिह्नित करते हैं।

Oracle PL/SQL Insert Update Delete Select Into

PL/SQL में DML लेनदेन

डीएमएल का मतलब डेटा मैनिपुलेशन लैंग्वेज है, जो कि डेटा मैनिपुलेशन लैंग्वेज का समूह है। एसक्यूएल वे कमांड जो किसी टेबल में संग्रहीत डेटा को बदलते हैं। PL/SQL ब्लॉकये कमांड हेरफेर का काम करते हैं, जबकि PL/SQL आसपास का लॉजिक प्रदान करता है। DML नीचे दिए गए ऑपरेशनों को संभालता है।

  • डेटा प्रविष्टि
  • डेटा अद्यतन
  • डेटा हटाना
  • डेटा चयन

PL/SQL में, डेटा में हेरफेर केवल SQL कमांड के माध्यम से किया जाता है।

डेटा प्रविष्टि

PL/SQL में, INSERT INTO कमांड का उपयोग करके किसी टेबल में पंक्तियाँ जोड़ी जाती हैं। यह कमांड टेबल का नाम, लक्षित कॉलम और कॉलम मान इनपुट के रूप में लेता है, और फिर उस मान को मूल टेबल में सम्मिलित करता है।

INSERT कमांड प्रत्येक कॉलम के लिए मान देने के बजाय SELECT स्टेटमेंट का उपयोग करके सीधे किसी अन्य टेबल से मान ले सकता है। SELECT स्टेटमेंट के माध्यम से, स्रोत टेबल में मौजूद पंक्तियों की संख्या के बराबर पंक्तियों को एक साथ सम्मिलित किया जा सकता है।

सिंटेक्स:

BEGIN
INSERT INTO <table_name>(<column1>,<column2>,...,<column_n>)
VALUES(<value1>,<value2>,...,<value_n>);
END;

ऊपर दिया गया सिंटैक्स INSERT INTO कमांड को दर्शाता है। टेबल का नाम और मान अनिवार्य फ़ील्ड हैं, जबकि कॉलम के नाम वैकल्पिक हैं जब INSERT स्टेटमेंट टेबल के प्रत्येक कॉलम के लिए मान प्रदान करता है। VALUES कीवर्ड अनिवार्य है जब मान अलग-अलग दिए जाते हैं, जैसा कि ऊपर दिखाया गया है।

सिंटेक्स:

BEGIN
INSERT INTO <table_name>(<column1>,<column2>,...,<column_n>)
SELECT <column1>,<column2>,...,<column_n> FROM <table_name2>;
END;

INSERT INTO का यह दूसरा रूप सीधे मान लेता है SELECT कमांड का उपयोग करते हुए। यहां VALUES कीवर्ड मौजूद नहीं होना चाहिए क्योंकि मान अलग से प्रदान नहीं किए जाते हैं।

डेटा अद्यतन

डेटा अपडेट का अर्थ है किसी मौजूदा पंक्ति में किसी कॉलम के मान को बदलना। यह UPDATE स्टेटमेंट द्वारा किया जाता है, जो इनपुट के रूप में टेबल का नाम, कॉलम का नाम और नया मान लेता है और डेटा को अपडेट करता है।

सिंटेक्स:

BEGIN
UPDATE <table_name>
SET <column1>=<value1>,<column2>=<value2>,<column_n>=<value_n>
WHERE <condition that uniquely identifies the record that needs to be updated>;
END;

ऊपर दिया गया सिंटैक्स UPDATE स्टेटमेंट को दर्शाता है। SET कीवर्ड PL/SQL इंजन को दिए गए मान से कॉलम को अपडेट करने का निर्देश देता है। WHERE क्लॉज़ वैकल्पिक है; यदि यह नहीं दिया जाता है, तो उल्लिखित कॉलम का मान पूरी टेबल में अपडेट हो जाता है।

डेटा हटाना

डेटा विलोपन का अर्थ है डेटाबेस टेबल से एक पूर्ण रिकॉर्ड को हटाना। इसके लिए DELETE कमांड का उपयोग किया जाता है।

सिंटेक्स:

BEGIN
DELETE FROM <table_name>
WHERE <condition that uniquely identifies the record that needs to be deleted>;
END;

ऊपर दिया गया वाक्यविन्यास DELETE कमांड को दर्शाता है। FROM कीवर्ड वैकल्पिक है, और FROM क्लॉज़ के साथ या उसके बिना भी कमांड एक ही तरह से काम करता है। WHERE क्लॉज़ भी वैकल्पिक है; यदि इसे नहीं दिया जाता है, तो पूरी तालिका खाली कर दी जाएगी।

डेटा चयन

डेटा प्रोजेक्शन या फ़ेचिंग का अर्थ है डेटाबेस टेबल से आवश्यक डेटा प्राप्त करना। यह SELECT कमांड और INTO क्लॉज़ के संयोजन से किया जाता है। SELECT कमांड डेटाबेस से मान प्राप्त करता है, और INTO क्लॉज़ उन मानों को PL/SQL ब्लॉक के स्थानीय वेरिएबल्स को असाइन करता है।

INTO फ़ंक्शन के साथ SELECT स्टेटमेंट का उपयोग करते समय निम्नलिखित बिंदुओं पर विचार करना आवश्यक है:

  • INTO क्लॉज़ का उपयोग करते समय SELECT स्टेटमेंट को केवल एक ही रिकॉर्ड लौटाना चाहिए, क्योंकि एक वेरिएबल में केवल एक ही मान हो सकता है। यदि SELECT एक से अधिक पंक्तियाँ लौटाता है, तो... TOO_MANY_ROWS अपवाद उठाया है।
  • SELECT स्टेटमेंट INTO क्लॉज़ में वेरिएबल को मान असाइन करता है, इसलिए मान भरने के लिए कम से कम एक रिकॉर्ड की आवश्यकता होती है। यदि कोई रिकॉर्ड नहीं मिलता है, तो NO_DATA_FOUND अपवाद उत्पन्न होता है।
  • SELECT क्लॉज़ में कॉलम की संख्या और उनके डेटाटाइप, INTO क्लॉज़ में वेरिएबल की संख्या और उनके डेटाटाइप से मेल खाने चाहिए।
  • मानों को उसी क्रम में प्राप्त और भरा जाता है जैसा कि कथन में उल्लेख किया गया है।
  • WHERE क्लॉज़ वैकल्पिक है और यह आपको उन रिकॉर्ड्स पर अधिक प्रतिबंध लगाने की अनुमति देता है जिन्हें फ़ेच किया जाता है।
  • अन्य डीएमएल स्टेटमेंट्स की वेयर कंडीशन में SELECT स्टेटमेंट का उपयोग करके कंडीशंस के मानों को परिभाषित किया जा सकता है।
  • INSERT, UPDATE या DELETE स्टेटमेंट के अंदर उपयोग किए जाने वाले SELECT स्टेटमेंट में INTO क्लॉज़ नहीं होना चाहिए, क्योंकि इन मामलों में यह किसी भी वेरिएबल को पॉपुलेट नहीं करता है।

सिंटेक्स:

BEGIN
SELECT <column1>,...,<column_n> INTO <variable1>,...,<variable_n>
FROM <table_name>
WHERE <condition to fetch the required records>;
END;

ऊपर दिया गया वाक्यविन्यास SELECT-INTO कमांड को दर्शाता है। FROM कीवर्ड अनिवार्य है और यह उस तालिका की पहचान करता है जिससे डेटा प्राप्त किया जाना है। WHERE खंड वैकल्पिक है; यदि इसे नहीं दिया जाता है, तो पूरी तालिका से डेटा प्राप्त किया जाएगा।

उदाहरण 1: इस उदाहरण में, हम देखेंगे कि PL/SQL में DML ऑपरेशन कैसे किए जाते हैं। हम नीचे दिए गए चार रिकॉर्ड को emp टेबल में डालेंगे।

EMP_नाम EMP_नहीं वेतन पोर्टफोलियो
BBB 1000 25000 एएए
XXX 1001 10000 BBB
YYY 1002 10000 BBB
ZZZ 1003 7500 BBB

फिर हम 'XXX' के वेतन को 15000 तक अपडेट करेंगे, कर्मचारी रिकॉर्ड 'ZZZ' को हटा देंगे, और अंत में कर्मचारी 'XXX' के विवरण को प्रोजेक्ट करेंगे।

नीचे दिए गए स्क्रीनशॉट में इस उदाहरण के लिए उपयोग किए गए संपूर्ण PL/SQL ब्लॉक को दिखाया गया है।

Oracle PL/SQL ब्लॉक जो खाली टेबल पर इंसर्ट, अपडेट, डिलीट और सेलेक्ट इनपुट ऑपरेशन करता है

DECLARE
l_emp_name VARCHAR2(250);
l_emp_no NUMBER;
l_salary NUMBER;
l_manager VARCHAR2(250);
BEGIN
INSERT INTO emp(emp_name,emp_no,salary,manager)
VALUES('BBB',1000,25000,'AAA');
INSERT INTO emp(emp_name,emp_no,salary,manager)
VALUES('XXX',1001,10000,'BBB');
INSERT INTO emp(emp_name,emp_no,salary,manager)
VALUES('YYY',1002,10000,'BBB');
INSERT INTO emp(emp_name,emp_no,salary,manager)
VALUES('ZZZ',1003,7500,'BBB');
COMMIT;
Dbms_output.put_line('Values Inserted');
UPDATE EMP
SET salary=15000
WHERE emp_name='XXX';
COMMIT;
Dbms_output.put_line('Values Updated');
DELETE emp WHERE emp_name='ZZZ';
COMMIT;
Dbms_output.put_line('Values Deleted');
SELECT emp_name,emp_no,salary,manager INTO l_emp_name,l_emp_no,l_salary,l_manager FROM emp WHERE emp_name='XXX';
Dbms_output.put_line('Employee Detail');
Dbms_output.put_line('Employee Name:'||l_emp_name);
Dbms_output.put_line('Employee Number:'||l_emp_no);
Dbms_output.put_line('Employee Salary:'||l_salary);
Dbms_output.put_line('Employee Manager Name:'||l_manager);
END;
/

आउटपुट:

Values Inserted
Values Updated
Values Deleted
Employee Detail
Employee Name:XXX
Employee Number:1001
Employee Salary:15000
Employee Manager Name:BBB

Code स्पष्टीकरण:

  • Code पंक्ति 2-5: चरों की घोषणा करना।
  • Code पंक्ति 7-14: रिकॉर्ड को कर्मचारी तालिका में सम्मिलित किया जा रहा है।
  • Code पंक्ति 15: इंसर्ट ट्रांजैक्शन को कमिट करना।
  • Code पंक्ति 17-19: कर्मचारी 'XXX' का वेतन बढ़ाकर 15000 कर दिया गया है।
  • Code पंक्ति 20: अपडेट लेनदेन को पूरा किया जा रहा है।
  • Code पंक्ति 22: 'ZZZ' का रिकॉर्ड हटाया जा रहा है।
  • Code पंक्ति 23: डिलीट ट्रांजैक्शन को कमिट किया जा रहा है।
  • Code पंक्ति 25: 'XXX' के रिकॉर्ड का चयन करना और l_emp_name, l_emp_no, l_salary और l_manager वैरिएबल को पॉपुलेट करना।
  • Code पंक्ति 26-30: प्राप्त रिकॉर्ड के मान प्रदर्शित किए जा रहे हैं।

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

नहीं। स्टैटिक PL/SQL सीधे DDL नहीं चला सकता। स्टेटमेंट को स्ट्रिंग के रूप में बनाएं और उसे निष्पादित करें। बाहर निकलने के लिए धन्यवादजो रनटाइम पर CREATE, ALTER और DROP को हैंडल करता है।

SELECT INTO क्वेरी से ठीक एक पंक्ति प्राप्त होनी चाहिए। अनेक पंक्तियाँ पढ़ने के लिए, स्पष्ट रूप से एक SELECT INTO क्वेरी का उपयोग करें। कर्सर FETCH लूप का उपयोग करके, या किसी संग्रह में BULK COLLECT का उपयोग करके।

DELETE एक DML है: यह WHERE क्लॉज़ का उपयोग करके चयनित पंक्तियों को हटाता है और इसे वापस लिया जा सकता है। TRUNCATE एक DDL है: यह प्रत्येक पंक्ति को तुरंत साफ़ कर देता है, स्वतः सबमिट हो जाता है और इसे पूर्ववत नहीं किया जा सकता है।

हाँ। INSERT, UPDATE और DELETE के बदलाव तब तक आपके सेशन में बने रहते हैं जब तक आप उन्हें हटा नहीं देते। COMMITPL/SQL में ऑटो-कमिट की सुविधा नहीं है। सहेजने के लिए COMMIT का उपयोग करें या हटाने के लिए ROLLBACK का उपयोग करें।

MERGE एक अप्सर्ट ऑपरेशन करता है - यह जॉइन कंडीशन से मेल खाने वाली पंक्तियों को अपडेट करता है और उन पंक्तियों को इंसर्ट करता है जो मेल नहीं खातीं - एक ही स्टेटमेंट में अलग-अलग UPDATE और INSERT पास की आवश्यकता नहीं होती।

RETURNING INTO फ़ंक्शन INSERT, UPDATE या DELETE द्वारा प्रभावित पंक्तियों से कॉलम मानों को कैप्चर करता है और उन्हें वैरिएबल में संग्रहीत करता है, जिससे परिवर्तित डेटा को पढ़ने के लिए एक अतिरिक्त SELECT फ़ंक्शन की आवश्यकता नहीं होती है।

हां. गिटहब कोपिलॉट यह लेख एक संक्षिप्त टिप्पणी से INSERT, UPDATE, DELETE और SELECT INTO ब्लॉक का मसौदा तैयार करता है, बाइंड वैरिएबल का सुझाव देता है और कॉलम सूचियों को पूरा करता है, हालांकि आपको पहले तर्क की समीक्षा कर लेनी चाहिए।

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

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