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; /
Kodeforklaring:
- Kodelinje 1: Mærkning af den ydre blok som "OUTER_BLOCK".
- Kodelinje 3: Erklæring af en variabel 'var1' som VARCHAR2 (30) med startværdien "ydre blok".
- Kodelinje 4: Erklæring af en variabel 'var2' som VARCHAR2 (30) med startværdien "værdi før indre blok".
- Kodelinje 6: Mærkning af den indre blok som "INNER_BLOCK"
- Kodelinje 8: Erklæring af en variabel 'var1' i den indre blok som VARCHAR2 (30) med startværdien "indre blok".
- Kodelinje 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.
- Kodelinje 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'.
- Kodelinje 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; /
Kodeforklaring:
- Kodelinje 1: Mærkning af den ydre blok som "OUTER_BLOCK".
- Kodelinje 3: Erklærer en variabel 'ln_val' som NUMBER med startværdien "5".
- Kodelinje 5: Mærkning af den indre blok som "INNER_BLOCK"
- Kodelinje 7: Erklæring af en variabel 'ln_val' i indre blok som NUMBER med startværdien "3".
- Kodelinje 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.