Kaj je gnezdeni bloki Oracle?
V PL / SQL lahko vsak blok ugnezdi v drug blok. Označeni so kot ugnezdeni blok. Vgnezdeni bloki so zelo pogosti, kadar želimo izvesti določen postopek, hkrati pa je treba kodo tega procesa hraniti v ločenem vsebniku (bloku).
Koncept ugnezdenega bloka bo programerju pomagal izboljšati berljivost z ločevanjem zapletenih stvari v vsak blok in obvladovanjem izjeme za vsak blok znotraj glavnega zunanjega bloka.
V tej vadnici boste izvedeli-
- Struktura ugnezdenega bloka
- Obsegi v ugnezdenem bloku: spremenljiv obseg
Struktura ugnezdenega bloka
Blok lahko ugnezdi v drug blok. To lahko ugnezdi bodisi v izvedbeni del bodisi v del za obdelavo izjem. Ti bloki so lahko tudi označeni. En zunanji blok lahko vsebuje veliko notranjih blokov. Vsak notranji blok je spet PL / SQL blok, zato bodo vse lastnosti in značilnosti notranjega bloka enake zunanjemu bloku. Spodnja slika daje slikovni prikaz ugnezdene blokovne strukture. Nadrejeni blok je glavni blok, podrejeni blok pa je ugnezdeni blok.
Spodaj je sintaksa ugnezdenega bloka.
Sintaksa ugnezdenega bloka
<>DECLARE BEGIN < >DECLARE BEGIN .EXCEPTION END; EXCEPTION END;
- Zgornja sintaksa prikazuje ugnezdeni blok, ki vsebuje skupaj dva bloka.
- Ti bloki so označeni kot 'external_block' in 'inner_block'
Obsegi v ugnezdenem bloku: spremenljiv obseg
V ugnezdenem bloku je treba pred uporabo jasno razumeti obseg in vidnost vsakega bloka. Zlasti v notranjem bloku bodo vidni elementi tako zunanjega kot notranjega bloka, zato je to potrebno pravilno razumeti.
Spodnje točke bodo povzele več o obsegih v ugnezdenih blokih.
- Elementi, navedeni v zunanjem bloku, in vrednost, ki je definirana pred definicijo notranjega bloka, so vidni znotraj notranjega bloka.
- Elementi, navedeni v notranjem bloku, v zunanjem bloku niso vidni. Vidni so samo znotraj notranjega bloka.
- Zunanji blok in notranji blok imata lahko spremenljivko z istim imenom.
- V primeru spremenljivk z istim imenom se privzeto notranji blok nanaša samo na spremenljivko, navedeno v notranjem bloku.
- Če se notranji blok želi sklicevati na spremenljivko zunanjega bloka, ki ima enako ime kot notranji blok, potem mora biti zunanji blok OZNAČEN, zunanja spremenljivka bloka pa se lahko imenuje '
. «
Spodnji primer bo pomagal razumeti več o teh področjih.
Primer 1 : V tem primeru bomo videli obseg spremenljivk v notranjem in zunanjem bloku. Prav tako bomo videli, kako napotiti spremenljivke z uporabo oznake bloka.
<>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;/
Razlaga kode:
- Koda 1 : Oznaka zunanjega bloka kot "OUTER_BLOCK".
- Vrstica kode 3 : Spremenljivka 'var1' se razglasi za VARCHAR2 (30) z začetno vrednostjo "zunanji blok".
- Vrstica kode 4 : Spremenljivka 'var2' se razglasi za VARCHAR2 (30) z začetno vrednostjo "vrednost pred notranjim blokom".
- 6. vrstica kode: Označevanje notranjega bloka kot "INNER_BLOCK"
- Vrstica kode 8: Razglasitev spremenljivke 'var1' v notranjem bloku kot VARCHAR2 (30) z začetno vrednostjo "notranji blok".
- Vrstica kode 10: Tiskanje vrednosti 'var1'. Ker privzeto ni omenjena nobena nalepka, bo vrednost vzela iz notranjega bloka in s tem natisnila sporočilo 'inner_block'.
- Vrstica kode 11: Tiskanje vrednosti spremenljivke zunanjega bloka 'var1'. Ker ima notranji blok spremenljivko z istim imenom, se moramo sklicevati na zunanjo oznako bloka. Tako se natisne sporočilo "zunanji blok".
- Vrstica kode 12: Tiskanje vrednosti spremenljivke zunanjega bloka 'var2'. Ker v notranjem bloku ni spremenljivke s tem imenom, bo privzeto prevzela vrednost iz zunanjega bloka in s tem sporočilo natisnila vrednost pred notranjim blokom.
- Spremenljivki 'var2' v zunanjem bloku je bila dodeljena vrednost 'vrednost po notranjem bloku'. Toda ta dodelitev se je zgodila po definiciji notranjega bloka. Zato ta vrednost ni prisotna v notranjem bloku.
Primer 2 : V tem primeru bomo našli razliko med dvema številkama, eno deklarirano na zunanjem bloku in drugo na notranjem bloku. Oba bosta imela isto ime. Poglejmo, kako je oznaka bloka koristna pri sklicevanju na te spremenljivke.
<>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;/
Razlaga kode:
- Koda 1 : Oznaka zunanjega bloka kot "OUTER_BLOCK".
- Vrstica kode 3 : Spremenljivka 'ln_val' se razglasi za ŠTEVILO z začetno vrednostjo "5".
- Vrstica kode 5: Označi notranji blok kot "INNER_BLOCK"
- Vrstica kode 7: Spremenljivka 'ln_val' v notranjem bloku se razglasi za ŠTEVILO z začetno vrednostjo "3".
- Vrstica kode 9: Tiskanje razlike v vrednosti 'ln_val' iz zunanjega in notranjega bloka. Oblika "
. " se uporablja za sklicevanje na te spremenljivke, da bi se izognili konfliktom zaradi istega imena spremenljivke.
Povzetek
V tej vadnici smo se naučili, kako ustvariti ugnezdeni blok in kako ravnati s področjem uporabe v notranjem bloku in zunanjem bloku. Videli smo tudi primer, ko so bile spremenljivke iz notranjega in zunanjega bloka napotene znotraj notranjega bloka.