Theory
ગતિશીલ College Registry
કલ્પો કે તમે ધમધમતા college admissions દરમિયાન CampusLib application સંભાળી રહ્યા છો. એક student નું રહેઠાણનું સરનામું કે phone number semesters દરમિયાન અનેક વાર બદલાઈ શકે છે, પણ એમનો University Roll Number પહેલા દિવસથી કાયમ માટે થીજેલો રહે છે. Database programming માં, તમે values ને hardcode કરી શકતા નથી કારણ કે અમુક data પાણીની જેમ વહે છે, જ્યારે બીજો data સંપૂર્ણપણે પથ્થરમાં કોતરાયેલો હોય છે. PL/SQL માં આને સુઘડ રીતે સંભાળવા, આપણે variables, constants, અને data types પર પ્રભુત્વ મેળવવું પડશે.
Theory
Label લગાવેલાં Storage ખોખાં
એક variable ને 'Lunch' label વાળા plastic ના tiffin ડબ્બા જેવું વિચારો. આજે એમાં maggi છે; કાલે તમે એને ધોઈને fried rice ભરી શકો. ડબ્બાનું label એનું એ જ રહે છે, પણ અંદરની સામગ્રી બદલાય છે. એક constant એ સીલ મારેલા, થપ્પો લગાવેલા university exam ના પરબીડિયા જેવો છે, એક વાર મુખ્ય કચેરીએ પેક થયા પછી, નિયમો તોડ્યા વગર કોઈ અંદરનું બદલી શકતું નથી. એક Data Type ખાલી ડબ્બાનો ભૌતિક આકાર છે: એક ગોળ thermos માત્ર પ્રવાહી વસ્તુઓ રાખી શકે (જેમ કે DATE કે NUMBER), જ્યારે એક સપાટ folder લખાણનાં પાનાં રાખે છે (જેમ કે VARCHAR2).
Theory
સમજદાર Memory ફાળવવી
ઔપચારિક રીતે, એક Variable એ નામ આપેલી memory ની જગ્યા છે જેની value program ના execution દરમિયાન વધઘટ થઈ શકે છે, જ્યારે એક Constant CONSTANT keyword વાપરીને ખાતરી કરે છે કે એની initialize થયેલી value આખા transaction block દરમિયાન માત્ર વાંચી શકાય એવી રહે. પાયાના scalar types ઉપરાંત, Oracle એક ભવ્ય ટૂંકું ઓજાર રજૂ કરે છે: %TYPE attribute. v_name members.name%TYPE; લખીને, તમે Oracle ને કહો છો કે એ table column માંથી બિલકુલ એ જ data type અને લંબાઈનું configuration આપોઆપ નકલ કરે, જેથી પછીથી કોઈ system administrator database field નું કદ વધારે તો પણ code crash ન થાય.
At a glance
PL/SQL માં data સંઘરવાના elements ના મુખ્ય સંરચનાત્મક ગુણધર્મો
| Element નો પ્રકાર | Syntax Layout નો નિયમ | Value ની પરિવર્તનશીલતા | શ્રેષ્ઠ ઉપયોગ |
|---|---|---|---|
| Variable | variable_name data_type [:= value]; | BEGIN block ની અંદર ગમે ત્યારે ફરીથી લખી શકાય છે | User inputs, loop counters, કે એક જ query નાં પરિણામો સંઘરવા |
| Constant | constant_name CONSTANT data_type := value; | સખ્તાઈથી માત્ર વાંચી શકાય એવો; ફરીથી સોંપાય તો compile error ફેંકે છે | નિશ્ચિત tax rates, પુસ્તક check-out ની મહત્તમ મર્યાદા, કે ગાણિતિક અચળાંકો |
| %TYPE Anchor | variable_name table.column%TYPE; | મૂળ column ના type ના નિયમો સંપૂર્ણપણે વારસામાં લે છે | મહત્તમ data લંબાઈ hardcode કર્યા વગર database row ની values સલામત રીતે લાવવી |
Practical
Declaring and Testing Memory Anchors
-- A sample block demonstrating safe variable and constant declarations
DECLARE
-- Constant: Max books allowed must be initialized immediately
MAX_BOOKS_ALLOWED CONSTANT NUMBER := 5;
-- Smart Variable: Automatically inherits data type from CampusLib schema
v_book_title books.title%TYPE;
-- Standard Variable with a default initialization value
v_current_fine NUMBER(5,2) := 0.00;
BEGIN
-- Assigning a value to our smart variable using the proper operator
v_book_title := 'Mastering Oracle';
v_current_fine := 45.50;
DBMS_OUTPUT.PUT_LINE('Book Title: ' || v_book_title);
DBMS_OUTPUT.PUT_LINE('Fine Amount: Rs. ' || v_current_fine);
DBMS_OUTPUT.PUT_LINE('Max Limit: ' || MAX_BOOKS_ALLOWED);
END;
/Follow along
Oracle Runtime પર %TYPE કેવી રીતે Process કરે છે
- 1. Schema ની તપાસ Oracle compiler declaration section વાંચે છે અને database dictionary માં લક્ષ્ય table (દા.ત. books) શોધે છે.
- 2. માળખાનું પ્રતિબિંબ એ ચાલતાં ચાલતાં નિર્દિષ્ટ column નો data type અને ચોક્કસ byte કદ (દા.ત. VARCHAR2(100)) કાઢે છે.
- 3. Memory ની ફાળવણી Compiler તમારા સ્થાનિક PL/SQL variable ના configuration માટે એકસરખું આંતરિક storage buffer ફાળવે છે.
- 4. છૂટું પડેલું Execution Database administrators પછીથી column ના કદ બદલે તો પણ variable સલામત રીતે ચાલે છે, હાથે code update કરવાનું દૂર કરતાં.
Quiz
જો તમે DECLARE section માં CONSTANT keyword વાપરીને એક constant જાહેર કરો પણ ત્યાં જ એને એક શરૂઆતની value સોંપવાનું ભૂલી જાઓ તો શું થાય છે?
- Oracle આપોઆપ 0 કે એક ખાલી string ની default value સોંપે છે.
- Oracle તમને એને ખાલી જાહેર કરવા અને પછીથી BEGIN block ની અંદર એની value સોંપવા દે છે.
- Oracle એક compilation error ફેંકે છે કારણ કે constants ને જાહેર થવાની બિલકુલ એ જ ક્ષણે initialize કરવા જ પડે છે.
- Block સફળતાપૂર્વક compile થાય છે પણ constant ને આપોઆપ એક standard variable માં ફેરવી નાખે છે.
Show the answer
Oracle એક compilation error ફેંકે છે કારણ કે constants ને જાહેર થવાની બિલકુલ એ જ ક્ષણે initialize કરવા જ પડે છે.
કારણ કે constants સંપૂર્ણપણે માત્ર વાંચી શકાય એવા છે, એમને પછીથી executable block માં બદલી શકાતા નથી. તેથી, Oracle સખ્તાઈથી લાગુ કરે છે કે તમારે એક constant ને એની જાહેરાત વખતે જ assignment operator (:=) કે DEFAULT keyword વાપરીને એક value થી initialize કરવો જ પડશે.
Watch out
ચૂપચાપ ચાલતો NULL Arithmetic ફાંદો
જો તમે v_total_fine NUMBER; જેવો એક standard numeric variable જાહેર કરો અને એને સ્પષ્ટપણે := 0 થી initialize ન કરો, Oracle એની default સંરચનાત્મક સ્થિતિ NULL રાખે છે. SQL અને PL/SQL માં, એક NULL value પર કરેલી કોઈ પણ ગાણિતિક ક્રિયા તરત NULL માં પરિણમે છે (દા.ત. 50 + NULL = NULL). જો તમે એક initialize ન થયેલા variable માં મોડું fee ઉમેરવાનો પ્રયાસ કરો, તમારી કુલ ગણતરી કોરી જગ્યામાં ગાયબ થઈ જાય છે! હંમેશા numeric counters ને 0 થી initialize કરો.
Think first
ગતિશીલ Columns Schema ની કસોટી
માનસિક પડકાર: જો તમે તમારા database schema માં એક table ના column ની વ્યાખ્યા VARCHAR2(50) થી બદલીને VARCHAR2(100) કરો, તો શું તમારે %TYPE દ્વારા એ column નો સંદર્ભ લેતો PL/SQL block હાથે શોધીને, ફરીથી લખીને, ફરીથી compile કરવો પડશે? Tap કરતાં પહેલાં વિચારો.
Show the answer
ના, નહીં પડે! એ જ %TYPE નો શુદ્ધ maintenance નો જાદુ છે. આગલી વાર જ્યારે PL/SQL block ચાલશે, Oracle dynamically અપડેટ થયેલી data dictionary તપાસે છે, નવી VARCHAR2(100) ફાળવણીનું કદ પારખે છે, અને એક પણ લીટીના હાથે કરેલા code edits વગર એ આપોઆપ તમારા variable પર લાગુ કરે છે.
Summary
Key takeaways
- Variables વધઘટ થતા data ના buffers રાખે છે જે executable block ની અંદર ગમે ત્યારે ફરીથી લખી શકાય છે.
- Constants CONSTANT keyword વાપરે છે અને એમને જાહેરાત વખતે જ એક અપરિવર્તનીય value સોંપવી જ પડે છે.
- Scalar data types text strings, numbers, dates, અને સત્યની સ્થિતિ જેવી પાયાની અલગ values આવરી લે છે.
- %TYPE attribute સ્થાનિક variables ને ખરેખરા database schema columns સાથે dynamically બાંધે છે.
- Initialize ન થયેલા variables NULL પર default થાય છે, જે ધ્યાન ન રખાય તો ગાણિતિક ગણતરીઓ ચૂપચાપ ભૂંસી શકે છે.
- Memory hook: Variables છૂટાં પાનાં છે, constants પાકા પૂંઠાં છે, અને %TYPE એક જીવંત સંરચનાત્મક અરીસો છે!