PL/SQL-i muutuja ulatus ja sisemine välimine plokk: pesastatud struktuur
Mis on pesastatud plokid Oracle?
PL/SQL-is saab iga ploki teise plokki pesastada. Neid nimetatakse pesastatud plokkideks. Pesastatud plokid on väga levinud, kui tahame teatud protsessi läbi viia ja samal ajal tuleks nende protsesside koodi hoida eraldi konteineris (plokis).
Pesastatud ploki kontseptsioon aitab programmeerijal parandada loetavust, eraldades keerulised asjad igasse plokki ja käsitleda iga ploki erandit peamise välisploki sees.
Pesastatud plokistruktuur
Ploki saab pesastada teise plokki. Selle saab pesastada kas täitmisossa või erandite käsitlemine osa. Neid plokke saab ka märgistada. Üks välimine plokk võib sisaldada palju sisemisi plokke. Iga sisemine plokk on veel kord a PL/SQL plokk, seega on kõik sisemise ploki omadused ja omadused samad, mis välise ploki omadused. Allolev pilt annab pesastatud plokkide struktuuri pildilise esituse. Emaplokk on põhiplokk ja alamplokk on pesastatud plokk.
Allpool on pesastatud ploki süntaks.
Pesastatud ploki süntaks
<<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;
- Ülaltoodud süntaks näitab pesastatud plokki, mis sisaldab kokku kahte plokki.
- Need plokid on tähistatud kui "outer_block" ja "inner_block"
Pesastatud ploki ulatused: muutuv ulatus
Pesastatud plokkide puhul tuleb enne iga ploki kasutamist selgelt mõista nende ulatust ja nähtavust. Eelkõige sisemises plokis on nähtavad nii välimise kui ka sisemise ploki elemendid, mistõttu on vaja seda õigesti mõista.
Allpool toodud punktid võtavad rohkem kokku pesastatud plokkide ulatuse kohta.
- Välisplokis deklareeritud elemendid ja väärtus, mis on määratletud enne sisemise ploki määratlust, on nähtavad sisemise ploki sees.
- Sisemises plokis deklareeritud elemendid pole välimises plokis nähtavad. Need on nähtavad ainult sisemise ploki sees.
- Välisplokil ja sisemisel plokil võivad olla sama nimega muutujad.
- Sama nimega muutujate puhul viitab sisemine plokk vaikimisi ainult sisemises plokis deklareeritud muutujale.
- Kui sisemine plokk soovib viidata välisele ploki muutujale, millel on sama nimi, mis sisemise ploki oma, siis peaks välimine plokk olema MÄRGISTATUD ja välisele ploki muutujale võib viidata kui " . '
Allolev näide aitab nende ulatuse kohta rohkem mõista.
Näiteks 1: Selles näites näeme sisemise ja välimise ploki muutujate ulatust. Samuti näeme, kuidas muutujatele plokisildi abil viidata.
<<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; /
Koodi selgitus:
- Koodirida 1: Välisploki märgistamine kui "OUTER_BLOCK".
- Koodirida 3: muutuja 'var1' deklareerimine kui VARCHAR2 (30) algväärtusega "outer block".
- Koodirida 4: muutuja 'var2' deklareerimine kui VARCHAR2 (30) algväärtusega "väärtus enne sisemist plokki".
- Koodirida 6: Sisemise ploki märgistamine kui "INNER_BLOCK"
- Koodirida 8: Muutuja 'var1' deklareerimine sisemises plokis kui VARCHAR2 (30) algväärtusega "inner block".
- Koodirida 10: 'var1' väärtuse trükkimine. Kuna vaikimisi ühtki silti ei mainita, võtab see väärtuse sisemisest plokist, seega prinditakse teade "inner_block".
- Koodirida 11: Välise ploki muutuja 'var1' väärtuse trükkimine. Kuna sisemises plokis on muutuja sama nimega, peame viitama välimisele ploki sildile. Seega trükitakse teade 'välimine plokk'.
- Koodirida 12: Välise ploki muutuja 'var2' väärtuse trükkimine. Kuna sisemises plokis pole sellenimelist muutujat, võtab see vaikimisi väärtuse välimisest plokist, seega trükitakse teade "väärtus enne sisemist plokki".
- Välisploki muutujale 'var2' on määratud väärtus 'value after inner block'. Kuid see määramine on toimunud pärast sisemise ploki määratlemist. Seetõttu pole seda väärtust sisemises plokis.
Näiteks 2: Selles näites leiame erinevuse kahe arvu vahel, millest üks on deklareeritud välimises ja teine sisemises plokis. Mõlemad saavad sama nime. Vaatame, kuidas on ploki silt nende muutujate viitamisel kasulik.
<<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; /
Koodi selgitus:
- Koodirida 1: Välisploki märgistamine kui "OUTER_BLOCK".
- Koodirida 3: muutuja 'ln_val' deklareerimine NUMBER, mille algväärtus on "5".
- Koodirida 5: Sisemise ploki märgistamine kui "INNER_BLOCK"
- Koodirida 7: Muutuja 'ln_val' deklareerimine sisemises plokis NUMBER, mille algväärtus on "3".
- Koodirida 9: Välis- ja siseploki 'ln_val' väärtuse erinevuse trükkimine. " . ” vormingut kasutatakse nendele muutujatele viitamiseks, et vältida sama muutuja nimest tulenevaid konflikte.
kokkuvõte
Selles õpetuses õppisime, kuidas luua pesastatud plokki ning kuidas käsitleda ulatust sisemises ja välimises plokkis. Oleme näinud ka näidet, kus sisemise ja välimise ploki muutujatele viidati sisemise ploki sees.




