PL/SQL Variabelt omfang & indre ydre blok: Indlejret struktur
Hvad er Nested Blocks Oracle?
I PL/SQL kan hver blok indlejres i en anden blok. De omtales som en indlejret blok. Indlejrede blokke er meget almindelige, nรฅr vi รธnsker at udfรธre den bestemte proces, og samtidig skal koden til disse processer opbevares i en separat beholder (blok).
Indlejret blokkoncept vil hjรฆlpe programmรธren med at forbedre lรฆsbarheden ved at adskille de komplekse ting i hver blok og hรฅndtere undtagelsen for hver blok inde i den ydre hovedblok.
Indlejret blokstruktur
En blok kan indlejres i en anden blok. Dette kan indlejres enten i udfรธrelsesdelen eller i undtagelse hรฅndtering en del. Disse blokke kan ogsรฅ mรฆrkes. En ydre blok kan indeholde mange indre blokke. Hver indre blok er igen en PL/SQL-blok, derfor vil alle egenskaber og karakteristika for den indre blok vรฆre de samme som den ydre blok. Billedet nedenfor giver den billedlige reprรฆsentation af indlejret blokstruktur. Den overordnede blok er hovedblokken, og den underordnede blok er den indlejrede blok.
Nedenfor er syntaksen for den indlejrede blok.
Indlejret bloksyntaks
<<outer_block>> DECLARE <Declarative section> BEGIN <Execution part for outer block begins> <<inner block>> DECLARE <Declarative section> BEGIN <Execution part for inner block>. EXCEPTION <Exception handling part> END; <Execution part for outer block begins> EXCEPTION <Exception handling part> END;
- Ovenstรฅende syntaks viser den indlejrede blok, der indeholder i alt to blokke.
- Disse blokke er mรฆrket som 'ydre_blok' og 'indre_blok'
Omfang i indlejret blok: Variabelt omfang
I indlejret blok skal man forstรฅ omfanget og synligheden af โโhver blok klart, fรธr man bruger dem. Isรฆr i den indre blok vil elementerne fra bรฅde den ydre og den indre blok vรฆre synlige, derfor er en ordentlig forstรฅelse af dette nรธdvendig.
Nedenstรฅende punkter vil opsummere mere om omfanget i indlejrede blokke.
- Elementerne erklรฆret i den ydre blok og vรฆrdi, der er defineret fรธr den indre blokdefinition, er synlige inde i den indre blok.
- Elementerne angivet i den indre blok er ikke synlige i den ydre blok. De er kun synlige inden for den indre blok.
- Ydre blok og indre blok kan have en variabel med samme navn.
- I tilfรฆlde af variabler med samme navn, vil indre blok som standard kun referere til den variabel, der er erklรฆret i indre blok.
- Hvis indre blok รธnsker at henvise til den ydre blokvariabel, der har samme navn som den indre blok, skal den ydre blok LABELLED, og โโden ydre blokvariabel kan henvises til som ' . '
Nedenstรฅende eksempel vil hjรฆlpe med at forstรฅ mere om disse scopes.
Eksempel 1: I dette eksempel skal vi se omfanget af variabler i den indre og ydre blok. Vi skal ogsรฅ se, hvordan man henviser til variablerne ved hjรฆlp af bloklabel.
<<OUTER_BLOC>> DECLARE varl VARCHAR2(30):='outer_block'; var2 VARCHAR2(30):='value before inner blockโ; BEGIN <<NNER_BLOCK>> DECLARE varl VARCHAR2(30):='inner_block'; BEGIN dbms_output.put_line(varl), โญ โฌ dbms_output.put_line(OUTER_BLOCKvar1); dbms_output.put_line(var2); END; var2:='value after inner block'; END; /
Code Forklaring:
- Code line 1: Mรฆrkning af den ydre blok som "OUTER_BLOCK".
- Code line 3: Erklรฆring af en variabel 'var1' som VARCHAR2 (30) med startvรฆrdien "ydre blok".
- Code line 4: Erklรฆring af en variabel 'var2' som VARCHAR2 (30) med startvรฆrdien "vรฆrdi fรธr indre blok".
- Code linje 6: Mรฆrkning af den indre blok som "INNER_BLOCK"
- Code linje 8: Erklรฆring af en variabel 'var1' i den indre blok som VARCHAR2 (30) med startvรฆrdien "indre blok".
- Code linje 10: Udskrivning af vรฆrdien af โโ'var1'. Da ingen etiket er nรฆvnt som standard, vil den tage vรฆrdien fra en indre blok, og derfor udskrive 'inner_block'-meddelelsen.
- Code linje 11: Udskrivning af vรฆrdien af โโden ydre blokvariabel 'var1'. Da den indre blok har variablen med samme navn, skal vi henvise til den ydre bloketikette. Dermed udskrives meddelelsen 'ydre blok'.
- Code linje 12: Udskrivning af vรฆrdien af โโden ydre blokvariabel 'var2'. Da der ikke er nogen variabel med dette navn til stede i den indre blok, vil den som standard tage vรฆrdien fra en ydre blok, og derfor udskriver meddelelsen 'vรฆrdi fรธr indre blok'.
- Variablen 'var2' i den ydre blok er blevet tildelt vรฆrdien 'vรฆrdi efter indre blok'. Men denne opgave er sket efter definitionen af โโen indre blok. Derfor er denne vรฆrdi ikke til stede i den indre blok.
Eksempel 2: I dette eksempel skal vi finde forskellen mellem to tal, et angivet ved den ydre blok og et andet ved den indre blok. Begge vil have samme navn. Lad os se, hvordan bloketiketten er nyttig til at henvise til disse variabler.
<<OUTER_BLOC>> DECLARE ln_val NUMBER :=5; BEGIN <<INNERBLOC>> DECLARE ln_val NUMBER :=3; BEGIN dbms_output.put_line(The difference between outer block and inner block variable is:'||' outer_block. ln_val-inner_block.ln_val); END; END; /
Code Forklaring:
- Code line 1: Mรฆrkning af den ydre blok som "OUTER_BLOCK".
- Code line 3: Erklรฆrer en variabel 'ln_val' som NUMBER med startvรฆrdien "5".
- Code linje 5: Mรฆrkning af den indre blok som "INNER_BLOCK"
- Code linje 7: Erklรฆring af en variabel 'ln_val' i indre blok som NUMBER med startvรฆrdien "3".
- Code linje 9: Udskrivning af forskellen i vรฆrdi af 'ln_val' fra ydre og indre blok. Det " . formatet bruges til at henvise til disse variabler for at undgรฅ konflikter pรฅ grund af samme variabelnavn.
Resumรฉ
I denne tutorial har vi lรฆrt, hvordan man opretter en indlejret blok, og hvordan man hรฅndterer omfanget i indre blok og ydre blokke. Vi har ogsรฅ set et eksempel, hvor variablerne fra den indre og ydre blok blev henvist inde i den indre blok.




