Što je ugniježđeni blok Oracle?
U PL / SQL-u svaki blok može biti ugniježđen u drugi blok. Oni se nazivaju ugniježđenim blokom. Ugnježđeni blokovi su vrlo česti kad želimo izvršiti određeni postupak, a istodobno bi se kôd tih procesa trebao čuvati u zasebnom spremniku (bloku).
Koncept ugniježđenog bloka pomoći će programeru da poboljša čitljivost razdvajanjem složenih stvari u svaki blok i obrađivanjem iznimke za svaki blok unutar glavnog vanjskog bloka.
U ovom vodiču naučit ćete-
- Struktura ugniježđenog bloka
- Opsezi u ugniježđenom bloku: Promjenjivi opseg
Struktura ugniježđenog bloka
Blok se može ugnijezditi u drugi blok. To se može ugnijezditi ili u izvršnom dijelu ili u dijelu za rukovanje iznimkama. Ovi blokovi također mogu biti označeni. Jedan vanjski blok može sadržavati mnogo unutarnjih blokova. Svaki unutarnji blok je opet PL / SQL blok, stoga će sva svojstva i karakteristike unutarnjeg bloka biti jednaka vanjskom bloku. Slika dolje daje slikovni prikaz ugniježđene blokovske strukture. Nadređeni blok je glavni blok, a podređeni blok je ugniježđeni blok.
Ispod je sintaksa ugniježđenog bloka.
Sintaksa ugniježđenih blokova
<>DECLARE BEGIN < >DECLARE BEGIN .EXCEPTION END; EXCEPTION END;
- Gornja sintaksa prikazuje ugniježđeni blok koji sadrži ukupno dva bloka.
- Ti su blokovi označeni kao 'external_block' i 'inner_block'
Opsezi u ugniježđenom bloku: Promjenjivi opseg
U ugniježđenom bloku prije razumijevanja treba jasno razumjeti opseg i vidljivost svakog bloka. Osobito u unutarnjem bloku, bit će vidljivi elementi i iz vanjskog i iz unutarnjeg bloka, pa je stoga potrebno pravilno razumijevanje toga.
Ispod će se sažeti više o opsezima u ugniježđenim blokovima.
- Elementi deklarirani u vanjskom bloku i vrijednost koja je definirana prije definiranja unutarnjeg bloka vidljivi su unutar unutarnjeg bloka.
- Elementi deklarirani u unutarnjem bloku nisu vidljivi u vanjskom bloku. Vidljivi su samo unutar unutarnjeg bloka.
- Vanjski blok i unutarnji blok mogu imati varijablu s istim imenom.
- U slučaju varijabli s istim imenom, unutarnji blok prema zadanim postavkama odnosit će se samo na varijablu deklariranu u unutarnjem bloku.
- Ako unutarnji blok želi uputiti vanjsku varijablu bloka koja ima isto ime kao i ona unutarnjeg bloka, tada bi vanjski blok trebao biti OZNAČEN, a vanjska varijabla bloka može se nazivati '
. '
Primjer u nastavku pomoći će vam da razumijete više o tim opsezima.
Primjer 1 : U ovom ćemo primjeru vidjeti opseg varijabli u unutarnjem i vanjskom bloku. Također ćemo vidjeti kako uputiti varijable pomoću 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;/
Objašnjenje koda:
- Redak koda 1 : Označavanje vanjskog bloka kao "OUTER_BLOCK".
- Redak koda 3 : Deklariranje varijable 'var1' kao VARCHAR2 (30) s početnom vrijednošću "vanjskog bloka".
- Redak koda 4 : Deklariranje varijable 'var2' kao VARCHAR2 (30) s početnom vrijednošću "vrijednost prije unutarnjeg bloka".
- Redak koda 6: Označavanje unutarnjeg bloka kao "INNER_BLOCK"
- Redak koda 8: Deklariranje varijable 'var1' u unutarnjem bloku kao VARCHAR2 (30) s početnom vrijednošću "unutarnji blok".
- Redak koda 10: Ispis vrijednosti 'var1'. Budući da se nijedna naljepnica ne spominje prema zadanim postavkama, ona će uzeti vrijednost iz unutarnjeg bloka, dakle ispis poruke "inner_block".
- Redak koda 11: Ispis vrijednosti vanjske varijable bloka 'var1'. Budući da unutarnji blok ima varijablu s istim imenom, moramo se pozvati na vanjsku oznaku bloka. Tako se ispisuje poruka 'vanjski blok'.
- Redak koda 12: Ispis vrijednosti varijable vanjskog bloka 'var2'. Budući da u unutarnjem bloku nema varijable s ovim imenom, prema zadanim postavkama ona će vrijednost uzeti iz vanjskog bloka, dakle ispis poruke "vrijednost prije unutarnjeg bloka".
- Varijabli 'var2' u vanjskom bloku dodijeljena je vrijednost 'vrijednost nakon unutarnjeg bloka'. Ali ovaj se zadatak dogodio nakon definicije unutarnjeg bloka. Stoga ova vrijednost nije prisutna u unutarnjem bloku.
Primjer 2 : U ovom ćemo primjeru pronaći razliku između dva broja, jednog deklariranog na vanjskom bloku i drugog na unutarnjem bloku. Oboje će imati isto ime. Pogledajmo kako je oznaka bloka korisna u upućivanju na ove varijable.
<>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;/
Objašnjenje koda:
- Redak koda 1 : Označavanje vanjskog bloka kao "OUTER_BLOCK".
- Redak koda 3 : Deklariranje varijable 'ln_val' kao BROJ s početnom vrijednošću "5".
- Redak koda 5: Označavanje unutarnjeg bloka kao "INNER_BLOCK"
- Redak koda 7: Deklariranje varijable 'ln_val' u unutarnjem bloku kao BROJ s početnom vrijednošću "3".
- Redak koda 9: Ispis razlike u vrijednosti 'ln_val' s vanjskog i unutarnjeg bloka. Format "
. " koristi se za upućivanje na ove varijable kako bi se izbjegli sukobi zbog istog imena varijable.
Sažetak
U ovom uputstvu naučili smo kako stvoriti ugniježđeni blok i kako rukovati opsegom u unutarnjem i vanjskom bloku. Također smo vidjeli primjer gdje su varijable iz unutarnjeg i vanjskog bloka upućene unutar unutarnjeg bloka.