Mis on Nested Blocks Oracle?
PL / SQL-is saab iga ploki ühendada teise plokiga. Neid nimetatakse pesastatud plokiks. Pesastatud plokid on väga levinud, kui soovime teatud protsessi läbi viia, ja samal ajal tuleks nende protsesside kood hoida eraldi konteineris (plokis).
Pesastatud ploki kontseptsioon aitab programmeerijal loetavust parandada, eraldades keerulised asjad igasse plokki ja käsitledes välise peamise ploki sees oleva ploki erandit.
Selles õpetuses saate teada
- Pesastatud ploki struktuur
- Reguleerimisala pesastatud plokis: muutuv ulatus
Pesastatud ploki struktuur
Ploki saab pesastada teise plokki. Selle saab pesastada kas täitmisosas või erandite käsitlemise osas. Neid plokke saab ka sildistada. Üks välimine plokk võib sisaldada palju sisemisi plokke. Iga sisemine plokk on jällegi PL / SQL-plokk, seega on kõik sisemise ploki omadused ja omadused samad, mis välimine plokk. Alloleval pildil on kujutatud pesastatud plokkstruktuur. Vanemplokk on peamine plokk ja lapseplokk on pesastatud plokk.
Allpool on pesastatud ploki süntaks.
Pesastatud plokksüntaks
<>DECLARE BEGIN < >DECLARE BEGIN .EXCEPTION END; EXCEPTION END;
- Ülaltoodud süntaks näitab pesastatud plokki, mis sisaldab kokku kahte plokki.
- Need plokid on märgistatud kui „external_block” ja „inner_block”
Reguleerimisala pesastatud plokis: muutuv ulatus
Pesastatud plokis tuleb enne nende kasutamist selgelt mõista iga ploki ulatust ja nähtavust. Eriti sisemises plokis on nähtavad nii välise kui ka sisemise ploki elemendid, mistõttu on vajalik selle mõistmine.
Allpool punktides tehakse kokkuvõte pesastatud plokkide ulatuse kohta.
- Välises plokis deklareeritud elemendid ja väärtus, mis on määratletud enne sisemise ploki määratlust, on nähtavad sisemise ploki sees.
- Siseplokis deklareeritud elemendid pole välimises plokis nähtavad. Need on nähtavad ainult sisemise ploki sees.
- Välisplokil ja siseplokil võib olla sama nimega muutuja.
- Sama nimega muutujate puhul viitab sisemine plokk vaikimisi ainult sisemises plokis deklareeritud muutujale.
- Kui sisemine plokk soovib viidata välisele plokimuutujale, millel on sama nimi kui sisemisele plokile, peaks välimine plokk olema LABELED ja välise ploki muutujale võib viidata kui "
. "
Allpool toodud näide aitab nende reguleerimisalade kohta rohkem teada saada.
Näide 1 : Selles näites näeme muutujate ulatust sise- ja välimisplokis. Samuti näeme, kuidas muutujaid plokisildi abil suunata.
<>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;/
Koodi selgitus:
- Koodirida 1 : välimise ploki sildistamine "OUTER_BLOCK".
- Koodirida 3 : Muutuja 'var1' deklareerimine VARCHAR2-ks (30) algse väärtusega "välimine plokk".
- Koodirida 4 : muutuja 'var2' deklareerimine VARCHAR2-ks (30) algväärtusega "väärtus enne sisemist plokki".
- Koodirida 6: sisemise ploki sildistamine "INNER_BLOCK"
- Koodirida 8: Deklareeritakse muutuja 'var1' sisemises plokis väärtusega VARCHAR2 (30) algväärtusega "sisemine plokk".
- Koodirida 10: „var1” väärtuse printimine. Kuna vaikimisi ühtegi silti ei mainita, võtab see väärtuse sisemisest plokist, seega trükitakse sõnum „inner_block“.
- Koodirida 11: Välise plokimuutuja 'var1' väärtuse printimine. Kuna sisemisel plokil on muutuja sama nimega, peame viitama välise ploki sildile. Nii trükitakse sõnum "välimine plokk".
- Koodirida 12: välise plokimuutuja 'var2' väärtuse printimine. Kuna sisemises plokis ei ole selle nimega muutujat, võtab see vaikimisi väärtuse väliselt plokilt, printides seega teate "väärtus enne sisemist plokki".
- Välise ploki muutujale „var2” on määratud väärtus „väärtus pärast sisemist plokki”. Kuid see ülesanne on toimunud pärast sisemise ploki määratlemist. Seega seda väärtust sisemises plokis ei esine.
Näide 2 : Selles näites leiame erinevuse kahe numbri vahel, millest üks on deklareeritud välimisel ja teine sisemisel plokil. Mõlemal on sama nimi. Vaatame, kuidas plokisilt on nende muutujate viitamisel kasulik.
<>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;/
Koodi selgitus:
- Koodirida 1 : välimise ploki sildistamine "OUTER_BLOCK".
- Koodirida 3 : muutuja 'ln_val' deklareerimine numbriks NUMBER algväärtusega "5".
- Koodirida 5: sisemise ploki sildistamine "INNER_BLOCK"
- Koodirida 7: Deklareeritakse muutuja 'ln_val' sisemises plokis numbriga NUMBER algväärtusega "3".
- Koodirida 9: „ln_val” väärtuse erinevuse printimine välimisest ja sisemisest plokist. Vormingut "
. " kasutatakse nende muutujate viitamiseks, et vältida sama muutuja nimest tulenevaid konflikte.
Kokkuvõte
Selles õpetuses oleme õppinud, kuidas luua pesastatud plokk ja kuidas käsitseda sisemises ja välimises plokis olevat ulatust. Oleme näinud ka näidet, kus sisemise ja välimise ploki muutujaid suunati sisemise ploki sisse.