PL / SQL-variabelt omfång & Inre yttre block: kapslad struktur

Innehållsförteckning:

Anonim

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 en viss process, och samtidigt ska koden för denna process förvaras i en separat behållare (block).

Kapslat blockkoncept hjälper 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.

I den här handledningen lär du dig-

  • Kapslad blockstruktur
  • Scopes in Nested Block: Variable Scope

Kapslad blockstruktur

Ett block kan kapslas in i ett annat block. Detta kan kapslas antingen i exekveringsdelen eller i undantagshanteringsdelen. Dessa block kan också märkas. Ett yttre block kan innehålla många innerblock. Varje inre block är återigen ett PL / SQL-block, därför kommer alla inre blockets egenskaper och egenskaper att vara desamma som det yttre blocket. Bilden nedan ger den bildliga återgivningen av kapslad blockstruktur. Föräldrablock är huvudblocket och barnblock är det kapslade blocket.

Nedan är syntaxen för det kapslade blocket.

Nested Block Syntax

<>DECLAREBEGIN<>DECLAREBEGIN.EXCEPTIONEND;EXCEPTIONEND;
  • Ovanstående syntax visar det kapslade blocket som innehåller totalt två block.
  • Dessa block är märkta som 'outer_block' och 'inner_block'

Scopes in Nested Block: Variable Scope

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 yttre och inre block att vara synliga, varför korrekt förståelse för detta är nödvändig.

Nedanstående punkter kommer att sammanfatta mer angående omfattningen i kapslade block.

  • Elementen som deklareras i det yttre blocket och det värde som definieras innan definitionen av det inre blocket syns inom det inre blocket.
  • Elementen som deklareras i det inre blocket är inte synliga i det yttre blocket. De är bara synliga i innerblocken.
  • Yttre block och Inre block kan ha en variabel med samma namn.
  • När det gäller variabler med samma namn hänvisar innerblock som standard endast till variabeln som deklareras i innerblock.
  • Om det inre blocket vill hänvisa till det yttre blockvariabeln som har samma namn som det inre blocket, ska det yttre blocket MÄRKAS och den yttre blockvariabeln kan hänvisas till '. '

Nedanstående exempel hjälper till att förstå mer om dessa omfattningar.

Exempel 1 : I detta exempel kommer vi att se omfattningen av variabler i det inre och yttre blocket. Vi kommer också att se hur man hänvisar variablerna med hjälp av blocketiketten.

<>DECLAREvarl VARCHAR2(30):='outer_block';var2 VARCHAR2(30):='value before inner block’;BEGIN<>DECLAREvarl VARCHAR2(30):='inner_block';BEGINdbms_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 : Förklarar en variabel 'var1' som VARCHAR2 (30) med det ursprungliga värdet "yttre block".
  • Kodrad 4 : Förklarar en variabel 'var2' som VARCHAR2 (30) med det ursprungliga värdet "värde före inre block".
  • Kodrad 6: Märkning av det inre blocket som "INNER_BLOCK"
  • Kodrad 8: Deklarerar en variabel 'var1' i det inre blocket som VARCHAR2 (30) med det ursprungliga värdet "innerblock".
  • Kodrad 10: Skriva ut värdet på 'var1'. Eftersom ingen etikett nämns som standard kommer det att ta värdet från ett inre block, därmed skriva ut "inner_block" -meddelandet.
  • Kodrad 11: Skriva ut värdet på den yttre blockvariabeln 'var1'. Eftersom det inre blocket har variabeln med samma namn måste vi hänvisa till yttre blocketiketten. Således skriver du ut meddelandet "yttre block".
  • Kodrad 12: Skriva ut värdet på den yttre blockvariabeln 'var2'. Eftersom det inte finns någon variabel med det här namnet i det inre blocket, kommer det som standard att ta värdet från ett yttre block, därmed skriva ut "värde före inre block" -meddelande.
  • Variabeln 'var2' i det yttre blocket har tilldelats värdet 'värde efter inre block'. Men denna uppgift har hänt efter definitionen av ett inre block. Därför finns inte detta värde i det inre blocket.

Exempel 2 : I det här exemplet ska vi hitta skillnaden mellan två siffror, ett deklarerat vid det yttre blocket och ett annat vid det inre blocket. Båda kommer att ha samma namn. Låt oss se hur blocketiketten är användbar vid hänvisning till dessa variabler.

<>DECLAREln_val NUMBER :=5;BEGIN<>DECLAREln_val NUMBER :=3;BEGINdbms_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 : Förklarar en variabel 'ln_val' som NUMBER med det ursprungliga värdet "5".
  • Kodrad 5: Märkning av det inre blocket som "INNER_BLOCK"
  • Kodrad 7: Förklarar en variabel 'ln_val' i det inre blocket som NUMBER med det ursprungliga värdet "3".
  • Kodrad 9: Skriv ut skillnaden i värde på 'ln_val' från yttre och inre block. Formatet ". " används för att hänvisa 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 innerblock och yttre block. Vi har också sett ett exempel där variablerna från det inre och yttre blocket hänvisades inuti det inre blocket.