PL/SQL variabel omfattning & inre yttre block: kapslad struktur
Vad รคr Nested Blocks Oracle?
I PL/SQL kan varje block kapslas in i ett annat block. De kallas ett kapslat block. Kapslade block รคr mycket vanliga nรคr vi vill utfรถra den specifika processen, och samtidigt bรถr koden fรถr dessa processer fรถrvaras i en separat behรฅllare (block).
Konceptet med kapslade block kommer att hjรคlpa programmeraren att fรถrbรคttra lรคsbarheten genom att separera de komplexa sakerna i varje block och att hantera undantaget fรถr varje block inuti det yttre huvudblocket.
Kapslad blockstruktur
Ett block kan kapslas in i ett annat block. Detta kan kapslas antingen i exekveringsdelen eller i undantagshantering del. Dessa block kan ocksรฅ mรคrkas. Ett yttre block kan innehรฅlla mรฅnga inre block. Varje inre block รคr รฅterigen en PL/SQL-block, dรคrfรถr kommer alla egenskaper och egenskaper hos det inre blocket att vara desamma som det yttre blocket. Bilden nedan ger en bildrepresentation av kapslad blockstruktur. Det รถverordnade blocket รคr huvudblocket och det underordnade blocket รคr det kapslade blocket.
Nedan รคr syntaxen fรถr det kapslade blocket.
Kapslad blocksyntax
<<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;
- Ovanstรฅende syntax visar det kapslade blocket som innehรฅller totalt tvรฅ block.
- Dessa block รคr mรคrkta som 'outer_block' och 'inner_block'
Omfattningar i kapslade block: Variabelt omfattning
I kapslade block mรฅste man fรถrstรฅ omfattningen och synligheten fรถr varje block tydligt innan man anvรคnder dem. Sรคrskilt i det inre blocket kommer elementen frรฅn bรฅde det yttre och det inre blocket att vara synliga, dรคrfรถr รคr det nรถdvรคndigt att fรถrstรฅ detta.
Nedanstรฅende punkter kommer att sammanfatta mer om omfattningen i kapslade block.
- Elementen som deklareras i det yttre blocket och vรคrdet som definieras fรถre den inre blockdefinitionen รคr synliga inuti det inre blocket.
- Elementen som deklareras i det inre blocket รคr inte synliga i det yttre blocket. De รคr endast synliga inom det inre blocket.
- Ytterblock och Innerblock kan ha en variabel med samma namn.
- I fallet med variabler med samma namn kommer inre block som standard endast att referera till variabeln som deklareras i det inre blocket.
- Om det inre blocket vill hรคnvisa till den yttre blockvariabeln som har samma namn som den fรถr det inre blocket, ska det yttre blocket mรคrkas och den yttre blockvariabeln kan kallas ' . '
Exemplet nedan hjรคlper dig att fรถrstรฅ mer om dessa omfattningar.
Exempelvis 1: I det hรคr exemplet kommer vi att se omfattningen av variabler i det inre och yttre blocket. Vi kommer ocksรฅ att se hur man refererar variablerna med blocketikett.
<<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; /
Kodfรถrklaring:
- Kodrad 1: Mรคrkning av det yttre blocket som "OUTER_BLOCK".
- Kodrad 3: Deklarerar en variabel 'var1' som VARCHAR2 (30) med initialvรคrdet "yttre block".
- Kodrad 4: Deklarerar en variabel 'var2' som VARCHAR2 (30) med initialvรคrdet "vรคrde fรถre innerblock".
- Kodrad 6: Mรคrkning av det inre blocket som "INNER_BLOCK"
- Kodrad 8: Deklarera en variabel 'var1' i det inre blocket som VARCHAR2 (30) med initialvรคrdet "inner block".
- Kodrad 10: Skriver ut vรคrdet fรถr 'var1'. Eftersom ingen etikett nรคmns som standard kommer den att ta vรคrdet frรฅn ett inre block, vilket gรถr att meddelandet "inner_block" skrivs ut.
- Kodrad 11: Skriver ut vรคrdet fรถr den yttre blockvariabeln 'var1'. Eftersom det inre blocket har variabeln med samma namn, mรฅste vi hรคnvisa till yttre blocketikett. Skriver alltsรฅ ut meddelandet 'yttre block'.
- Kodrad 12: Skriver ut vรคrdet fรถr den yttre blockvariabeln 'var2'. Eftersom det inte finns nรฅgon variabel med detta namn i det inre blocket, kommer den som standard att ta vรคrdet frรฅn ett yttre block, vilket gรถr att meddelandet "vรคrde fรถre inre block" skrivs ut.
- Variabeln 'var2' i det yttre blocket har tilldelats vรคrdet 'vรคrde efter inre block'. Men detta uppdrag har skett efter definitionen av ett inre block. Detta vรคrde finns dรคrfรถr inte i det inre blocket.
Exempelvis 2: I det hรคr exemplet ska vi hitta skillnaden mellan tvรฅ tal, ett deklarerat i det yttre blocket och ett annat i det inre blocket. Bรฅda kommer att ha samma namn. Lรฅt oss se hur blocketiketten รคr anvรคndbar fรถr att hรคnvisa till dessa 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; /
Kodfรถrklaring:
- Kodrad 1: Mรคrkning av det yttre blocket som "OUTER_BLOCK".
- Kodrad 3: Deklarerar en variabel 'ln_val' som NUMBER med startvรคrdet "5".
- Kodrad 5: Mรคrkning av det inre blocket som "INNER_BLOCK"
- Kodrad 7: Deklarera en variabel 'ln_val' i det inre blocket som NUMBER med startvรคrdet "3".
- Kodrad 9: Skriver ut skillnaden i vรคrde fรถr 'ln_val' frรฅn yttre och inre block. den " . โ-format anvรคnds fรถr att referera till dessa variabler fรถr att undvika konflikter pรฅ grund av samma variabelnamn.
Sammanfattning
I den hรคr handledningen har vi lรคrt oss hur man skapar ett kapslat block och hur man hanterar omfattningen i inre block och yttre block. Vi har ocksรฅ sett ett exempel dรคr variablerna frรฅn det inre och yttre blocket refererades inuti det inre blocket.




