PL/SQL változó hatóköre és belső külső blokk: beágyazott szerkezet
⚡ Okos összefoglaló
A PL/SQL-ben a beágyazott blokkok egy blokkot a másikba helyeznek, lehetővé téve az összetett logika elkülönítését és a kivételkezelés elkülönítését. A külső és belső blokkok közötti változók hatókörének megértése és a blokkcímkék használata egyértelművé teszi az azonos nevű változókat.

Mi az a beágyazott blokkok Oracle?
In PL / SQL, minden blokk beágyazható egy másik blokkba. Az ilyen blokkot beágyazott blokknak nevezzük. A beágyazott blokkok nagyon gyakoriak, ha egy bizonyos folyamatot végre akarunk hajtani, miközben megtartjuk aping az adott folyamat kódját egy külön konténerben (blokkban).
A beágyazott blokk koncepció segít a programozónak javítani az olvashatóságot azáltal, hogy összetett logikát különálló blokkokra bont, és lehetővé teszi a kivétel hogy minden blokkot a fő külső blokkon belül kezeljenek.
Beágyazott blokkszerkezet
Egy blokk beágyazható egy másik blokkba. Beágyazható a végrehajtási részbe vagy a kivételkezelési részbe, és ezek a blokkok címkézhetők is. Egy külső blokk sok belső blokkot tartalmazhat. Minden belső blokk önmagában is egy PL/SQL blokk, tehát a belső blokk összes tulajdonsága és jellemzője megegyezik a külső blokkéval. A szülőblokk a fő blokk, a gyermekblokk pedig a beágyazott blokk.
Az alábbi kép a beágyazott blokkszerkezet képi ábrázolását mutatja, amelyben a szülőblokk a fő blokk, a gyermekblokk pedig a beágyazott blokk.
Az alábbiakban a beágyazott blokk szintaxisa látható. Az alábbi képernyőkép a beágyazott blokk szintaxisát mutatja a címkézett külső és belső blokkokkal.
Beágyazott blokk szintaxis
<<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;
- A fenti szintaxis egy beágyazott blokkot mutat be, amely összesen két blokkot tartalmaz.
- Ezeket a blokkokat „külső_blokk” és „belső_blokk” címkékkel láttuk el.
Hatókör a beágyazott blokkban: Változó hatókör
Egy beágyazott blokkban minden blokk használata előtt világosan meg kell érteni azok hatókörét és láthatóságát. Különösen a belső blokkban láthatók mind a külső, mind a belső blokk elemei, ezért ennek megfelelő megértése szükséges.
Az alábbi pontok összefoglalják a beágyazott blokkokban található hatóköröket.
- A külső blokkban deklarált elemek, valamint a belső blokk definíciója előtt definiált érték látható a belső blokkon belül.
- A belső blokkban deklarált elemek nem láthatók a külső blokkban. Csak a belső blokkon belül láthatók.
- A külső és a belső blokk lehet egy változó ugyanazzal a névvel.
- Azonos nevű változók esetén a belső blokk alapértelmezés szerint csak a belső blokkban deklarált változóra hivatkozik.
- Ha a belső blokk a belső blokkváltozó nevével megegyező nevű külső blokkváltozóra akar hivatkozni, akkor a külső blokkot CÍMKÉZNEK kell lennie, és a külső blokkváltozóra úgy lehet hivatkozni, mint ' . '.
Az alábbi példa segít jobban megérteni ezeket a hatóköröket.
Példa 1: Ebben a példában a belső és külső blokkban található változók hatókörét látjuk. Azt is látjuk, hogyan lehet a változókra blokkcímke használatával hivatkozni.
Az alábbi képernyőkép az 1. példát mutatja, ahol a belső blokk egy külső blokkváltozóra hivatkozik a blokkcímke használatával.
<<OUTER_BLOCK>> DECLARE var1 VARCHAR2(30):='outer_block'; var2 VARCHAR2(30):='value before inner block'; BEGIN <<INNER_BLOCK>> DECLARE var1 VARCHAR2(30):='inner_block'; BEGIN dbms_output.put_line(var1); dbms_output.put_line(OUTER_BLOCK.var1); dbms_output.put_line(var2); END; var2:='value after inner block'; END; /
Code Magyarázat:
- Code 1. sor: A külső blokk „KÜLSŐ_BLOKK” címkézése.
- Code 3. sor: A 'var1' változó deklarálása VARCHAR2(30) változóként, a kezdeti érték „outer_block”.
- Code 4. sor: Egy 'var2' változó deklarálása VARCHAR2(30)-ként, amelynek kezdeti értéke „érték a belső blokk előtt”.
- Code 6. sor: A belső blokk „INNER_BLOCK” címkével való ellátása.
- Code 8. sor: A belső blokkban található 'var1' változó VARCHAR2(30) változóként való deklarálása „inner_block” kezdeti értékkel.
- Code 10. sor: A 'var1' értékének kinyomtatása. Mivel nincs megadva címke, alapértelmezés szerint a belső blokkból veszi az értéket, ezért a 'inner_block' üzenetet nyomtatja ki.
- Code 11. sor: A külső blokkváltozó, a 'var1' értékének kinyomtatása. Mivel a belső blokknak is van egy azonos nevű változója, a külső blokk címkéjére hivatkozunk. Így a 'outer_block' üzenetet nyomtatja ki.
- Code 12. sor: A külső blokkváltozó, 'var2' értékének kinyomtatása. Mivel a belső blokkban nincs ilyen nevű változó, alapértelmezés szerint a külső blokkból veszi az értéket, ezért a 'belső blokk előtti érték' üzenetet nyomtatja ki.
- A külső blokkban található „var2” változóhoz a „belső blokk utáni érték” érték van rendelve. Ez az értékadás azonban a belső blokk definíciója után történik, így ez az érték nincs jelen a belső blokkon belül.
Példa 2: Ebben a példában két szám közötti különbséget keressük, az egyik a külső blokkban, a másik a belső blokkban van deklarálva. Mindkettőnek ugyanaz a neve. Nézzük meg, hogyan hasznos a blokkcímke ezekre a változókra való hivatkozásban.
Az alábbi képernyőkép a 2. példát mutatja, amely kiszámítja az azonos nevű külső és belső blokkváltozók közötti különbséget.
<<OUTER_BLOCK>> DECLARE ln_val NUMBER :=5; BEGIN <<INNER_BLOCK>> 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; /
Code Magyarázat:
- Code 1. sor: A külső blokk „KÜLSŐ_BLOKK” címkézése.
- Code 3. sor: Az 'ln_val' változó deklarálása NUMBER formátumban, „5” kezdőértékkel.
- Code 5. sor: A belső blokk „INNER_BLOCK” címkével való ellátása.
- Code 7. sor: Az 'ln_val' változó deklarálása a belső blokkban NUMBER formátumban, „3” kezdeti értékkel.
- Code 9. sor: Kinyomtatja az 'ln_val' értékének különbségét a külső és belső blokkból. A „ . A „” formátumot használják ezekre a változókra való hivatkozásra, hogy elkerüljék az azonos változónevekből adódó ütközéseket.




