PL / SQL változó hatókör & Belső külső blokk: Beágyazott szerkezet

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

<>DECLAREBEGIN<>DECLAREBEGIN.EXCEPTIONEND;EXCEPTIONEND;
  • 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.

érdekes cikkek...