Mi az a Nested Blocks Oracle?
A PL / SQL-ben minden blokk beágyazható egy másik blokkba. Beágyazott blokkként említik őket. A beágyazott blokkok nagyon gyakoriak, amikor a bizonyos folyamatot el akarjuk hajtani, és ugyanakkor ezeknek a folyamatoknak a kódját külön tárolóban (blokkban) kell tartani.
A beágyazott blokkkoncepció segít a programozónak az olvashatóság javításában azáltal, hogy az összetett dolgokat minden blokkba szétválasztja, és kezeli a kivételeket az egyes blokkoknál a fő külső blokkon belül.
Ebben az oktatóanyagban megtanulja-
- Beágyazott blokkszerkezet
- Hatáskörök beágyazott blokkban: Változó hatókör
Beágyazott blokkszerkezet
Egy blokk beágyazható egy másik blokkba. Ez beágyazható akár a végrehajtási részben, akár a kivételkezelő részben. Ezek a blokkok címkézhetők is. Egy külső blokk sok belső blokkot tartalmazhat. Minden belső blokk ismét egy PL / SQL blokk, ezért a belső blokk összes tulajdonsága és jellemzője meg fog egyezni a külső blokkkal. Az alábbi kép a beágyazott blokkszerkezet képi ábrázolását mutatja. A szülő blokk a fő blokk, a gyermek blokk pedig a beágyazott blokk.
Az alábbiakban látható a beágyazott blokk szintaxisa.
Beágyazott blokk szintaxis
<>DECLARE BEGIN < >DECLARE BEGIN .EXCEPTION END; EXCEPTION END;
- A fenti szintaxis azt a beágyazott blokkot mutatja, amely összesen két blokkot tartalmaz.
- Ezeket a blokkokat „külső_blokk” és „belső_blokk” címkével látják el
Hatáskörök beágyazott blokkban: Változó hatókör
Beágyazott blokkban egyértelműen meg kell érteni az egyes blokkok hatókörét és láthatóságát, mielőtt felhasználnák őket. Különösen a belső blokkban lesznek láthatók a külső és a belső blokkból származó elemek, ezért ennek megfelelő megértése szükséges.
Az alábbiakban részletesebben összefoglaljuk a beágyazott blokkok hatóköreit.
- A külső blokkban deklarált elemek és a belső blokk definíciója előtt meghatározott értékek láthatók a belső blokkon belül.
- A belső blokkban deklarált elemek a külső blokkban nem láthatók. Csak a belső blokkon belül láthatók.
- A külső és a belső blokk azonos nevű változóval rendelkezhet.
- Azonos nevű változók esetén a belső blokk alapértelmezés szerint csak a belső blokkban deklarált változóra vonatkozik.
- Ha a belső blokk azt a külső blokkváltozót akarja hivatkozni, amelynek neve megegyezik a belső blokk nevével, akkor a külső blokkot LABELED-kel kell jelölni, és a külső blokkváltozót „
.
Az alábbi példa segít többet megérteni ezekről a hatókörökről.
1. példa : Ebben a példában megnézzük a változók körét a belső és a külső blokkban. Azt is meg fogjuk nézni, hogyan lehet hivatkozni a változókra a blokk címke segítségével.
<>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;/
Kód Magyarázat:
- 1. kódsor: A külső blokk címkézése "OUTER_BLOCK".
- 3. kódsor: A „var1” változó deklarálása VARCHAR2-nek (30) a kezdeti „külső blokk” értékkel.
- 4. kódsor: A „var2” változó deklarálása VARCHAR2 (30) néven az „érték a belső blokk előtt” kezdeti értékkel.
- 6. kódsor : A belső blokk címkézése "INNER_BLOCK" néven
- 8. kódsor : A „var1” változó deklarálása a belső blokkban VARCHAR2 (30) néven, a „belső blokk” kezdeti értékkel.
- 10. kódsor : A „var1” értékének kinyomtatása. Mivel alapértelmezés szerint nincs címke megemlítve, akkor az értéket egy belső blokkból veszi, így a 'inner_block' üzenetet nyomtatja.
- 11. kódsor: A „var1” külső blokkváltozó értékének kinyomtatása. Mivel a belső blokk azonos nevű változóval rendelkezik, utalnunk kell a külső blokk címkére. Így kinyomtatja a „külső blokk” üzenetet.
- 12. kódsor: A „var2” külső blokkváltozó értékének kinyomtatása. Mivel a belső blokkban nincs ilyen nevű változó, alapértelmezés szerint az értéket egy külső blokkból veszi, így az „érték a belső blokk előtt” üzenetet nyomtatja.
- A külső blokk „var2” változóját az „érték a belső blokk után” értékkel rendeltük hozzá. De ez a feladat egy belső blokk meghatározása után történt. Ezért ez az érték nincs jelen a belső blokkban.
2. példa : Ebben a példában meg fogjuk találni a különbséget két szám között, az egyiket a külső blokkon, a másikat a belső blokkon deklaráljuk. Mindkettőnek ugyanaz lesz a neve. Lássuk, mennyire hasznos a blokkcímke ezen változók hivatkozásában.
<>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;/
Kód Magyarázat:
- 1. kódsor: A külső blokk címkézése "OUTER_BLOCK".
- 3. kódsor: Az „ln_val” változó deklarálása NUMBER-nek, kezdeti értéke „5”.
- 5. kódsor : A belső blokk címkézése "INNER_BLOCK" néven
- 7. kódsor : A belső blokkban található „ln_val” változó NUMBER-ként való deklarálása a kezdeti értékkel „3”.
- 9. kódsor: Az „ln_val” értékkülönbségének kinyomtatása a külső és a belső blokkból. A "
. " formátumot használják ezekre a változókra, hogy elkerüljék az azonos változónévből adódó konfliktusokat.
Összegzés
Ebben az oktatóanyagban megtanultuk, hogyan kell létrehozni egy beágyazott blokkot, és hogyan kell kezelni a hatókört a belső és a külső blokkokban. Láttunk olyan példát is, ahol a belső és a külső blokk változóit a belső blokkon belül utaltuk.