Assigning Values to Variables

PL/SQL में, colon-equal operator (:=) एक variable में data डालता है, जबकि single equal sign (=) केवल पूछता है कि क्या दो चीज़ें पहले से मेल खा रही हैं।

10 min read · 11 cards · 2 checks

Read in: English · हिन्दी · ગુજરાતી


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 MethodSyntax Token UsedExecution WindowPrimary Use Case
Direct Assignment:=Declaration और Executable blocks दोनोंloop counters update करना या local math formulas चलाना
Default ProvisionDEFAULTकेवल Declaration blockfallback constants या starting counter baselines set करना
Database FetchSELECT ... INTOकेवल Executable blocktables के अंदर ख़ास 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;
/

Copy करके Oracle FreeSQL खोलें
Oracle FreeSQL, Oracle SQL का मुफ़्त online editor है। Code पहले copy हो जाता है: उसे वहां paste करके Run करें।

Follow along

एक SELECT INTO Assignment का Logistics

  1. 1. Parsing और Evaluation Oracle सामान्य query structure parse करता है और WHERE filter criteria से मेल खाते records के लिए physical table rows खोजता है।
  2. 2. Memory Capture engine मेल खाती row value को console output buffer पर print होने से पहले रोक लेता है।
  3. 3. INTO Channel रोके गए attribute values सीधे बाईं ओर INTO keyword के ठीक बाद सूचीबद्ध target variables में stream होते हैं।
  4. 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 लिखने की कोशिश करते हैं?

  1. statement सफलतापूर्वक execute होती है और variable value को 500 पर update करती है।
  2. Oracle अपने-आप इसे एक comparison expression में बदलता है और row को पूरी तरह skip करता है।
  3. compilation एक syntax error के साथ विफल होती है क्योंकि एक single equal sign एक assignment कार्रवाई नहीं कर सकता।
  4. 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 (=) इस्तेमाल कीजिए!

Study this properly

This page is the lesson to read. In Gri-Learn the same topic is a graded deck: the self-checks are scored and your weak topics are tracked. Free to start.

Start this topic

Already have an account? Sign in

More from PL/SQL and Conditional and Iterative Statements

Gri-Learn · syllabus-mapped B.C.A. lessons in English, Hindi and Gujarati

Assigning Values to Variables · Concepts of Relational Database Management Systems · Gri-Learn