Theory
Fine-Slab નો કોયડો
કલ્પો કે એક student CampusLib counter પર મોડું પુસ્તક પાછું આપે છે. Database program તરીકે, તમે બધા પાસેથી સપાટ 20 રૂપિયા દંડ લઈ શકતા નથી. જો પુસ્તક 1 થી 5 દિવસ મોડું હોય, fine રોજના Rs. 2 છે. જો એ 6 થી 10 દિવસ મોડું હોય, એ કૂદીને રોજના Rs. 5 થાય છે. જો એ 10 દિવસ વટાવે, એ રોજના Rs. 10 સુધી ઊછળે છે, અને એમનું library card તરત સ્થગિત કરવું પડે. તો આપણે આપણા database engine ને મોડા દિવસોની બદલાતી સંખ્યા જોઈને સમજદારીથી સાચો દંડ પસંદ કરવાનું કેવી રીતે શીખવીએ?
Theory
Railway Track બદલનાર
Standard SQL queries ને એક જ સીધા પાટા પર દોડતી bullet train જેવી વિચારો, એ કોઈ પસંદગી કર્યા વગર data ના દરેક block ને ક્રમશઃ અડે છે. PL/SQL conditional statements એક ધમધમતા railway junction પર track switcher ની જેમ કામ કરે છે. એક ચોક્કસ signal ના નિયમના આધારે (દા.ત. train Express છે કે local?), પાટો dynamically ખસે છે, train ને એક ચોક્કસ માર્ગે મોકલતાં જ્યારે વૈકલ્પિક રસ્તાઓ સંપૂર્ણપણે અવગણતાં.
Theory
નિર્ણય લેવાની Syntax
ઔપચારિક રીતે, PL/SQL તાર્કિક શાખા પાડતાં માળખાં વાપરીને નિર્ણયો સંભાળે છે. C, C++, કે Java થી વિપરીત, જે વાંકા કૌંસ {} અને else if જેવા keywords વાપરે છે, Oracle PL/SQL THEN, ELSIF જેવા સ્પષ્ટ, ચોખ્ખા keywords પર આધાર રાખે છે, અને એક નિર્ણાયક END IF; statement વાપરીને આખું condition નું માળખું સમાપ્ત કરે છે. દરેક conditional તપાસ એક expression ને TRUE, FALSE, કે NULL તરીકે આંકે છે, અને એ પ્રમાણે code નું execution વાળે છે.
At a glance
Oracle PL/SQL માં ઉપલબ્ધ મુખ્ય conditional માળખાં
| માળખાનો પ્રકાર | Keyword Layout | મૂલ્યાંકનનો નિયમ | શ્રેષ્ઠ ઉપયોગ |
|---|---|---|---|
| Single Choice | IF ... THEN ... END IF; | અંદરની logic માત્ર ત્યારે ચલાવે છે જ્યારે condition TRUE આંકાય. | એક નાનો warning flag ગોઠવવા જેવી વૈકલ્પિક ક્રિયાઓ લેવી. |
| Binary Choice | IF ... THEN ... ELSE ... END IF; | TRUE હોય તો રસ્તો A ચલાવે છે; FALSE કે NULL હોય તો રસ્તા B પર પડે છે. | Pass/Fail કે Paid/Unpaid જેવાં હા/ના પરિદૃશ્યો સંભાળવાં. |
| Multi-Tier Slabs | IF ... THEN ... ELSIF ... ELSE ... END IF; | અનેક expressions ને ઉપરથી નીચે ક્રમશઃ આંકે છે. | સ્તરવાળી pricing systems કે academic grade calculators બનાવવાં. |
| Value Matching | CASE ... WHEN ... THEN ... END CASE; | એક જ expression ને નિશ્ચિત લક્ષ્ય વિકલ્પો સામે સરખાવે છે. | ચોક્કસ code પસંદગીઓ તપાસતી વખતે લાંબી ELSIF સાંકળો બદલવી. |
Practical
Building a Multi-Tier Library Fine Calculator
-- An anonymous block to determine per-day fine rates and account lockdowns
DECLARE
v_overdue_days NUMBER := 12;
v_fine_per_day NUMBER;
v_total_fine NUMBER;
v_card_status VARCHAR2(20);
BEGIN
-- Multi-tier structural evaluation
IF v_overdue_days <= 5 THEN
v_fine_per_day := 2;
v_card_status := 'Active';
ELSIF v_overdue_days <= 10 THEN
v_fine_per_day := 5;
v_card_status := 'Active';
ELSE
v_fine_per_day := 10;
v_card_status := 'Suspended';
END IF;
-- Final mathematical calculation
v_total_fine := v_overdue_days * v_fine_per_day;
DBMS_OUTPUT.PUT_LINE('Account Status: ' || v_card_status);
DBMS_OUTPUT.PUT_LINE('Total Fine Payable: Rs. ' || v_total_fine);
END;
/Follow along
એક Conditional શાખાના પડદા પાછળ
- 1. Condition નો Trigger Engine સૌથી ઉપરની condition expression (v_overdue_days <= 5) આંકે છે. કારણ કે 12 એ 5 થી મોટું છે, આ FALSE આંકાય છે.
- 2. ક્રમશઃ ઉતરાણ Engine પહેલો block છોડી દે છે અને આગળનો દરવાજો તપાસે છે: ELSIF (v_overdue_days <= 10). આ પણ FALSE આંકાય છે.
- 3. Default પકડનાર બધી યાદી કરેલી conditions ખૂટી જતાં, compiler સીધો ELSE ખંડમાં ઊતરે છે, સ્થગિતતા અને Rs. 10 ની સોંપણીના variables ચલાવતાં.
- 4. રસ્તામાંથી બહાર Compiler END IF; નિશાનને અડે છે, તરત શાખાની વ્યવસ્થા બંધ કરે છે અને આગળ બાકીનાં standard સમીકરણો ચલાવવા વધે છે.
Quiz
એક exam પ્રશ્ન તમને એક multi-conditional check block લખવાનું કહે છે. વૈકલ્પિક conditional શાખાઓ માટે Oracle PL/SQL માં કઈ keyword ની જોડણી સફળતાપૂર્વક compile થશે?
- ELSEIF
- ELS_IF
- ELSIF
- ELSE IF
Show the answer
ELSIF
આ એક પાકો ફાંદો છે જે બહારના university examiners students ને પકડવા વાપરવાનું પસંદ કરે છે! 'else if' કે 'elseif' લખતી મોટા ભાગની programming languages થી વિપરીત, Oracle PL/SQL સખ્તાઈથી સંકોચેલો keyword 'ELSIF' લાગુ કરે છે ('ELSE' માંનો 'E' છોડી દેતાં). બીજી કોઈ પણ જોડણી તરત syntax નિષ્ફળતા ઊભી કરે છે.
Watch out
NULL Conditions નું ચૂપચાપ જોખમ
PL/SQL માં, જો એક condition ને initialize ન થયેલો variable મળે (જે NULL પર default થાય છે), એ crash થતું નથી. એને બદલે, તાર્કિક સરખામણી એક તટસ્થ સ્થિતિમાં ઊકલે છે જે નથી TRUE કે નથી FALSE. Oracle આને એક નિષ્ફળતા ગણે છે અને block ને છોડીને આગળ સરકે છે. જો તમે IS NULL વાપરીને NULL સ્થિતિઓ સ્પષ્ટપણે filter ન કરો, તમારા records સીધા default ELSE block માં પડશે, જે વિશાળ તાર્કિક ગણતરીની ભૂલો કરી શકે છે!
Think first
માળખાકીય નિર્ણયની કસોટી
જો તમારે તપાસવું હોય કે એક student 'BCA' વિભાગનો છે કે નહીં AND એમનું membership વર્ષ '3rd Year' છે કે નહીં જેથી graduation fee માં છૂટ આપી શકાય, તો તમારે એક જ CASE statement વાપરવું જોઈએ કે એક Nested IF માળખું? Tap કરતાં પહેલાં અનેક variables ની ચકાસણી વિશે વિચારો.
Show the answer
અહીં એક Nested IF માળખું ઘણું બહેતર છે! CASE statements એક જ variable ને સ્થિર, અલગ values ની યાદી સામે મેળવવામાં ઉત્તમ છે (જેમ કે Department 'BCA', 'BBA', કે 'BTech' છે કે નહીં એ તપાસવું). જ્યારે તમારે એકસાથે અનેક તદ્દન અલગ variables પર જુદાં, જટિલ તાર્કિક સંયોજનો આંકવાં હોય, ત્યારે એક 'IF' statement ને બીજાની અંદર મૂકવું સાફ અને સલામત નિયંત્રણ logic આપે છે.
Theory
Lab Exam ની Execution વ્યૂહરચના
Terminal laboratory examinations દરમિયાન PL/SQL code લખતી વખતે, મળતા અર્ધવિરામ ક્યારેય ભૂલશો નહીં. જ્યારે IF, THEN, અને ELSE સ્વતંત્ર clauses છે અને વિરામચિહ્ન લેતાં નથી, ત્યારે સમાપ્તિના block ને સખ્તાઈથી બિલકુલ END IF; તરીકે લખેલો સમાપ્તિનો અર્ધવિરામ જોઈએ જ. આ નાનકડો અક્ષર છોડી દેવાથી આખો Oracle compiler parser ખોરવાઈ જશે અને એક બાકી સંપૂર્ણ script બગડી જશે.
Summary
Key takeaways
- Conditional blocks boolean ચકાસણીના નિયમોના આધારે ચોક્કસ program logic અલગ પાડીને ચલાવે છે.
- કોઈ પણ નિર્ણય લેતા માળખાનું ફરજિયાત બંધ કરતું નિશાન એક સ્પષ્ટ 'END IF;' છે.
- સીધી compilation નિષ્ફળતાઓ ટાળવા અનોખી keyword જોડણી 'ELSIF' પર ધ્યાન રાખો.
- એક જ variable ના મેળ માટે CASE statements લાંબી ELSIF સાંકળોનો એક સાફ, સુઘડ વિકલ્પ આપે છે.
- Initialize ન થયેલા variables NULL માં ઊકલે છે, જેથી સરખામણીઓ ચૂપચાપ નિષ્ફળ જાય છે અને logic ના રસ્તે સીધી નીચે ઊતરી પડે છે.
- Memory hook: મેળ પડે તો THEN પર જાઓ; બીજી તપાસ જોઈએ તો એને ELSIF લખો; રસ્તો END IF થી પૂરો કરો!