PL/SQL Variabelt omfang og indre ytre blokk: Nestet struktur
Hva er Nested Blocks Oracle?
I PL/SQL kan hver blokk nestes inn i en annen blokk. De omtales som en nestet blokk. Nestede blokker er svรฆrt vanlige nรฅr vi รธnsker รฅ utfรธre den bestemte prosessen, og samtidig bรธr koden for disse prosessene oppbevares i en egen beholder (blokk).
Nested block-konsept vil hjelpe programmereren til รฅ forbedre lesbarheten ved รฅ separere de komplekse tingene i hver blokk og hรฅndtere unntaket for hver blokk inne i den ytre hovedblokken.
Nestet blokkstruktur
En blokk kan nestes inn i en annen blokk. Dette kan nestes enten i utfรธrelsesdelen eller i avvikshรฅndtering del. Disse blokkene kan ogsรฅ merkes. En ytre blokk kan inneholde mange indre blokker. Hver indre blokk er igjen en PL/SQL-blokk, derfor vil alle egenskapene og egenskapene til den indre blokken vรฆre de samme som ytre blokk. Bildet nedenfor gir en billedlig representasjon av nestet blokkstruktur. Overordnet blokk er hovedblokken og barneblokk er den nestede blokken.
Nedenfor er syntaksen for den nestede blokken.
Nestet blokksyntaks
<<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;
- Syntaksen ovenfor viser den nestede blokken som inneholder totalt to blokker.
- Disse blokkene er merket som 'outer_block' og 'inner_block'
Omfang i nestet blokk: Variabelt omfang
I nestet blokk mรฅ man forstรฅ omfanget og synligheten til hver blokk tydelig fรธr man bruker dem. Spesielt i den indre blokken vil elementene fra bรฅde ytre og indre blokk vรฆre synlige, derfor er god forstรฅelse av dette nรธdvendig.
Punktene nedenfor vil oppsummere mer om omfanget i nestede blokker.
- Elementene som er deklarert i den ytre blokken og verdien som er definert fรธr den indre blokkdefinisjonen er synlig inne i den indre blokken.
- Elementene som er deklarert i den indre blokken er ikke synlige i den ytre blokken. De er kun synlige innenfor den indre blokken.
- Ytre blokk og indre blokk kan ha en variabel med samme navn.
- I tilfelle av variabler med samme navn, vil indre blokk som standard kun referere til variabelen som er deklarert i indre blokk.
- Hvis indre blokk รธnsker รฅ referere til den ytre blokkvariabelen som har samme navn som den indre blokken, skal den ytre blokken merkes, og den ytre blokkvariabelen kan refereres til som ' . '
Eksempelet nedenfor vil hjelpe deg รฅ forstรฅ mer om disse omfangene.
Eksempel 1: I dette eksemplet skal vi se omfanget av variabler i den indre og ytre blokken. Vi skal ogsรฅ se hvordan vi refererer til variablene ved รฅ bruke blokketikett.
<<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: Merking av den ytre blokken som "OUTER_BLOCK".
- Kodelinje 3: Erklรฆrer en variabel 'var1' som VARCHAR2 (30) med startverdien "ytre blokk".
- Kodelinje 4: Erklรฆrer en variabel 'var2' som VARCHAR2 (30) med startverdien "verdi fรธr indre blokk".
- Kodelinje 6: Merke den indre blokken som "INNER_BLOCK"
- Kodelinje 8: Erklรฆre en variabel 'var1' i den indre blokken som VARCHAR2 (30) med startverdien "indre blokk".
- Kodelinje 10: Skriver ut verdien til 'var1'. Siden ingen etikett er nevnt som standard, vil den ta verdien fra en indre blokk, og skriver derfor ut 'inner_block'-meldingen.
- Kodelinje 11: Skriver ut verdien til den ytre blokkvariabelen 'var1'. Siden den indre blokken har variabelen med samme navn, mรฅ vi referere til ytre blokketikett. Dermed skrives ut meldingen 'ytre blokk'.
- Kodelinje 12: Skriver ut verdien til den ytre blokkvariabelen 'var2'. Siden det ikke finnes noen variabel med dette navnet i den indre blokken, vil den som standard ta verdien fra en ytre blokk, og skriver derfor ut 'verdi fรธr indre blokk'-melding.
- Variabelen 'var2' i den ytre blokken har blitt tildelt verdien 'verdi etter indre blokk'. Men denne oppgaven har skjedd etter definisjonen av en indre blokk. Derfor er denne verdien ikke til stede i den indre blokken.
Eksempel 2: I dette eksemplet skal vi finne forskjellen mellom to tall, ett erklรฆrt ved ytre blokk og et annet ved indre blokk. Begge vil ha samme navn. La oss se hvordan blokketikett er nyttig for รฅ henvise til disse variablene.
<<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: Merking av den ytre blokken som "OUTER_BLOCK".
- Kodelinje 3: Erklรฆrer en variabel 'ln_val' som NUMBER med startverdien "5".
- Kodelinje 5: Merke den indre blokken som "INNER_BLOCK"
- Kodelinje 7: Erklรฆre en variabel 'ln_val' i indre blokk som NUMBER med startverdien "3".
- Kodelinje 9: Skriver ut forskjellen i verdi av 'ln_val' fra ytre og indre blokk. ยซ . formatet brukes til รฅ referere til disse variablene for รฅ unngรฅ konflikter pรฅ grunn av samme variabelnavn.
Sammendrag
I denne opplรฆringen har vi lรฆrt hvordan du lager en nestet blokk og hvordan du hรฅndterer omfanget i indre blokk og ytre blokker. Vi har ogsรฅ sett et eksempel hvor variablene fra den indre og ytre blokken ble referert inne i den indre blokken.




