PL / SQL-Variablenbereich & Innerer äußerer Block: Verschachtelte Struktur

Inhaltsverzeichnis:

Anonim

Was ist verschachtelte Blöcke Oracle?

In PL / SQL kann jeder Block in einen anderen Block verschachtelt werden. Sie werden als verschachtelter Block bezeichnet. Verschachtelte Blöcke sind sehr häufig, wenn wir einen bestimmten Prozess ausführen möchten, und gleichzeitig sollte der Code für diesen Prozess in einem separaten Container (Block) aufbewahrt werden.

Das verschachtelte Blockkonzept hilft dem Programmierer, die Lesbarkeit zu verbessern, indem die komplexen Dinge in jeden Block aufgeteilt werden und die Ausnahme für jeden Block innerhalb des äußeren Hauptblocks behandelt wird.

In diesem Tutorial lernen Sie:

  • Verschachtelte Blockstruktur
  • Bereiche im verschachtelten Block: Variabler Bereich

Verschachtelte Blockstruktur

Ein Block kann in einen anderen Block verschachtelt werden. Dies kann entweder im Ausführungsteil oder im Ausnahmebehandlungsteil verschachtelt sein. Diese Blöcke können auch beschriftet werden. Ein äußerer Block kann viele innere Blöcke enthalten. Jeder innere Block ist wieder ein PL / SQL-Block, daher sind alle Eigenschaften und Merkmale des inneren Blocks dieselben wie der äußere Block. Das folgende Bild zeigt die bildliche Darstellung der verschachtelten Blockstruktur. Der übergeordnete Block ist der Hauptblock und der untergeordnete Block ist der verschachtelte Block.

Unten finden Sie die Syntax für den verschachtelten Block.

Verschachtelte Blocksyntax

<>DECLAREBEGIN<>DECLAREBEGIN.EXCEPTIONEND;EXCEPTIONEND;
  • Die obige Syntax zeigt den verschachtelten Block, der insgesamt zwei Blöcke enthält.
  • Diese Blöcke sind als "Outer_block" und "Inner_block" gekennzeichnet.

Bereiche im verschachtelten Block: Variabler Bereich

In verschachtelten Blöcken muss man den Umfang und die Sichtbarkeit jedes Blocks klar verstehen, bevor man sie verwendet. Insbesondere im inneren Block sind die Elemente sowohl vom äußeren als auch vom inneren Block sichtbar, daher ist ein angemessenes Verständnis davon erforderlich.

In den folgenden Punkten werden weitere Informationen zu den Bereichen in verschachtelten Blöcken zusammengefasst.

  • Die im äußeren Block deklarierten Elemente und der Wert, der vor der Definition des inneren Blocks definiert wurde, sind im inneren Block sichtbar.
  • Die im inneren Block deklarierten Elemente sind im äußeren Block nicht sichtbar. Sie sind nur innerhalb des inneren Blocks sichtbar.
  • Äußerer Block und innerer Block können eine Variable mit demselben Namen haben.
  • Bei gleichnamigen Variablen bezieht sich der innere Block standardmäßig nur auf die im inneren Block deklarierte Variable.
  • Wenn der innere Block auf die äußere Blockvariable verweisen möchte, die denselben Namen wie der innere Block hat, sollte der äußere Block ETIKETTIERT sein, und die äußere Blockvariable kann als '. ' bezeichnet werden.

Das folgende Beispiel hilft dabei, mehr über diese Bereiche zu erfahren.

Beispiel 1 : In diesem Beispiel sehen wir den Umfang der Variablen im inneren und äußeren Block. Außerdem werden wir sehen, wie die Variablen mithilfe der Blockbezeichnung referenziert werden.

<>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;/

Code Erläuterung:

  • Codezeile 1 : Beschriftung des äußeren Blocks als "OUTER_BLOCK".
  • Codezeile 3 : Deklarieren einer Variablen 'var1' als VARCHAR2 (30) mit dem Anfangswert "äußerer Block".
  • Codezeile 4 : Deklarieren einer Variablen 'var2' als VARCHAR2 (30) mit dem Anfangswert "Wert vor innerem Block".
  • Codezeile 6: Beschriftung des inneren Blocks als "INNER_BLOCK"
  • Codezeile 8: Deklarieren einer Variablen 'var1' im inneren Block als VARCHAR2 (30) mit dem Anfangswert "innerer Block".
  • Codezeile 10: Drucken des Werts von 'var1'. Da standardmäßig kein Etikett erwähnt wird, wird der Wert aus einem inneren Block übernommen, sodass die Nachricht 'inner_block' gedruckt wird.
  • Codezeile 11: Drucken des Werts der äußeren Blockvariablen 'var1'. Da der innere Block die Variable mit demselben Namen hat, müssen wir uns auf die Bezeichnung des äußeren Blocks beziehen. So wird die Meldung 'äußerer Block' gedruckt.
  • Codezeile 12: Drucken des Werts der äußeren Blockvariablen 'var2'. Da im inneren Block keine Variable mit diesem Namen vorhanden ist, wird standardmäßig der Wert aus einem äußeren Block übernommen, sodass die Meldung "Wert vor innerem Block" gedruckt wird.
  • Der Variablen 'var2' im äußeren Block wurde der Wert 'Wert nach dem inneren Block' zugewiesen. Diese Zuordnung erfolgte jedoch nach der Definition eines inneren Blocks. Daher ist dieser Wert im inneren Block nicht vorhanden.

Beispiel 2 : In diesem Beispiel werden wir den Unterschied zwischen zwei Zahlen finden, eine am äußeren Block und eine am inneren Block. Beide haben den gleichen Namen. Mal sehen, wie nützlich die Blockbezeichnung beim Verweisen auf diese Variablen ist.

<>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;/

Code Erläuterung:

  • Codezeile 1 : Beschriftung des äußeren Blocks als "OUTER_BLOCK".
  • Codezeile 3 : Deklarieren einer Variablen 'ln_val' als NUMBER mit dem Anfangswert "5".
  • Codezeile 5: Beschriftung des inneren Blocks als "INNER_BLOCK"
  • Codezeile 7: Deklarieren einer Variablen 'ln_val' im inneren Block als NUMBER mit dem Anfangswert "3".
  • Codezeile 9: Drucken der Wertdifferenz von 'ln_val' vom äußeren und inneren Block. Das Format ". " wird verwendet, um auf diese Variablen zu verweisen, um Konflikte aufgrund desselben Variablennamens zu vermeiden.

Zusammenfassung

In diesem Tutorial haben wir gelernt, wie man einen verschachtelten Block erstellt und wie man den Bereich in inneren und äußeren Blöcken behandelt. Wir haben auch ein Beispiel gesehen, in dem die Variablen aus dem inneren und äußeren Block innerhalb des inneren Blocks referenziert wurden.