Theory
Counter Balance Reset
कल्पना कीजिए आप CampusLib checkout desk के लिए backend module बना रहे हैं। एक student 50 rupees का late fee चुकाने आता है। इसे process करने के लिए, आपके database program को उनका मौजूदा balance देखना, नया total calculate करना, और उस नई calculation को memory buffer में मजबूर करना होगा। अगर आप ग़लत punctuation symbol इस्तेमाल करते हैं, database engine आपकी command को एक कार्रवाई ('balance को 50 पर set करो!') के बजाय एक सवाल ('क्या balance 50 के बराबर है?') के रूप में समझेगा। हम Oracle को एक सटीक data handover execute करने को कैसे बताते हैं?
Theory
Post-it Note बनाम Balance Scale
एक variable को एक value assign करने को अपने desk पर पुराने number के ऊपर एक sticky Post-it note पर एक ताज़ा telephone number लिखने और चिपकाने की तरह सोचिए। यह कार्रवाई पिछले content को एक बिल्कुल नए value से पूरी तरह override कर देती है। दूसरी ओर, दो values की तुलना करना एक पुराने balance scale के बाएँ ओर एक किताब और दाएँ ओर एक weight रखने जैसा है। आप किताब या weight बदल नहीं रहे; आप बस जाँच रहे हैं कि क्या वे perfectly संतुलित होते हैं। PL/SQL में, ये दो कार्य पूरी तरह अलग keys के sets इस्तेमाल करते हैं।
Theory
Value Assignment के तीन Methods
Oracle PL/SQL में, आप तीन अलग रास्तों से variables को values assign कर सकते हैं। पहला, declaration के दौरान, आप स्पष्ट assignment operator या DEFAULT keyword इस्तेमाल करके एक starting state स्थापित कर सकते हैं। दूसरा, executable block के भीतर, आप program workflows के आधार पर values dynamically बदलने के लिए assignment operator इस्तेमाल करते हैं। तीसरा, आप database columns से सीधे live data खींच सकते हैं और SELECT INTO नामक एक विशेष query format इस्तेमाल करके उन्हें सीधे local variables में stream कर सकते हैं।
At a glance
variable data states set करने के लिए punctuation और strategy variations।
| Assignment Method | Syntax Token Used | Execution Window | Primary Use Case |
|---|---|---|---|
| Direct Assignment | := | Declaration और Executable blocks दोनों | loop counters update करना या local math formulas चलाना |
| Default Provision | DEFAULT | केवल Declaration block | fallback constants या starting counter baselines set करना |
| Database Fetch | SELECT ... INTO | केवल Executable block | tables के अंदर ख़ास rows से real-time values load करना |
Practical
Value Ingestion और Assignment Flow दिखाना
-- An anonymous block showcasing all valid ways to populate local variables
DECLARE
-- Method 1: Initializing at declaration phase
v_base_fine NUMBER(4) := 20;
v_discount_rate NUMBER(3,2) DEFAULT 0.10;
v_final_payable NUMBER(6,2);
v_member_name members.name%TYPE;
BEGIN
-- Method 2: Direct assignment within the executable zone
v_final_payable := v_base_fine - (v_base_fine * v_discount_rate);
-- Method 3: Capturing a live column value via SELECT INTO
SELECT name
INTO v_member_name
FROM members
WHERE member_id = 101;
DBMS_OUTPUT.PUT_LINE('Member Name: ' || v_member_name);
DBMS_OUTPUT.PUT_LINE('Calculated Payable Fine: Rs. ' || v_final_payable);
END;
/Follow along
एक SELECT INTO Assignment का Logistics
- 1. Parsing और Evaluation Oracle सामान्य query structure parse करता है और WHERE filter criteria से मेल खाते records के लिए physical table rows खोजता है।
- 2. Memory Capture engine मेल खाती row value को console output buffer पर print होने से पहले रोक लेता है।
- 3. INTO Channel रोके गए attribute values सीधे बाईं ओर INTO keyword के ठीक बाद सूचीबद्ध target variables में stream होते हैं।
- 4. Data Locking local variables अपने internal memory locations तुरंत update करते हैं, downstream PL/SQL processing steps के लिए data lock करते हुए।
Quiz
क्या होगा अगर आप एक PL/SQL block के BEGIN section के भीतर 'v_total_cost = 500;' जैसा एक assignment statement लिखने की कोशिश करते हैं?
- statement सफलतापूर्वक execute होती है और variable value को 500 पर update करती है।
- Oracle अपने-आप इसे एक comparison expression में बदलता है और row को पूरी तरह skip करता है।
- compilation एक syntax error के साथ विफल होती है क्योंकि एक single equal sign एक assignment कार्रवाई नहीं कर सकता।
- block चलता है पर इसके बजाय target variable को NULL का एक value assign करता है।
Show the answer
compilation एक syntax error के साथ विफल होती है क्योंकि एक single equal sign एक assignment कार्रवाई नहीं कर सकता।
Oracle PL/SQL में, single equal sign (=) सख़्ती से conditions के लिए इस्तेमाल एक relational comparison operator है। एक value assignment करने के लिए इसे एक execution expression के अंदर इस्तेमाल करना एक तुरंत compilation failure trigger करता है। आपको assignment operator (:=) इस्तेमाल करना होगा।
Watch out
Reversal जाल: WHERE के अंदर := इस्तेमाल करना
जबकि एक calculation loop के अंदर := के लिए = उलझाना आपकी compilation तोड़ता है, उल्टी error भी उतनी ही विनाशकारी हो सकती है। अगर आप ग़लती से SELECT name INTO v_name FROM members WHERE member_id := 101; लिखते हैं, आप एक filter में एक assignment token pass कर रहे हैं। Oracle का query analyzer WHERE clause के अंदर एक comparison operator की उम्मीद करता है और एक structural expression error फेंकेगा। अपने colons को सख़्ती से अपनी कार्रवाइयों के भीतर रखिए, अपने सवालों में नहीं!
Think first
Default Value Overwrite Behavior जाँच
कल्पना कीजिए आपने एक text variable declare किया है: 'v_grade VARCHAR2(2) DEFAULT 'A';'। अगर आप executable block के अंदर 'v_grade := 'B';' के ज़रिए इसे एक नया value assign करते हैं, बाद में v_grade reference करने पर कौन सा value print होगा? संरचनात्मक priority के बारे में सोचिए।
Show the answer
यह 'B' print करेगा! DEFAULT keyword केवल उस पल का initial value नियंत्रित करता है जब memory allocate होती है। जैसे ही executable block assignment operator (:=) के ज़रिए एक direct assignment sequence चलाता है, initial default value साफ़ मिट जाता है और पूरी तरह overwrite हो जाता है।
Theory
Lab Exam Score Optimization
External examiners students को syntax slip-ups के लिए दंडित करना पसंद करते हैं। Semester 4 lab examinations के दौरान कागज़ या terminal screens पर code scripts लिखते समय, हर assignment block दोबारा जाँचिए। पक्का कीजिए कि आपके variables assignment operator के बाईं ओर सीधे बैठें (variable := value;), और अकेले equal sign को सख़्ती से अपने IF statements और query conditions के लिए बचाइए।
Summary
Key takeaways
- Value assignment एक variable के internal memory space को एक पूरी तरह नए state से overwrite करता है।
- स्पष्ट assignment operator (:=) data handovers process करने के लिए प्राथमिक engine है।
- DEFAULT keyword एक variable को declaration पर initialize करता है पर runtime updates आने पर किनारे हट जाता है।
- SELECT INTO clause database storage tables से row values को dynamically memory targets में map करता है।
- single equal sign (=) comparison contexts तक सीमित है और assignments के लिए इस्तेमाल होने पर syntax crashes पैदा करता है।
- Memory hook: एक बदलाव push करने के लिए colon-equal (:=) से punctuate कीजिए, status जाँचने के लिए एक शुद्ध equal (=) इस्तेमाल कीजिए!