Étendue de la variable PL / SQL & Bloc externe interne: structure imbriquée

Table des matières:

Anonim

Qu'est-ce que les blocs imbriqués Oracle?

En PL / SQL, chaque bloc peut être imbriqué dans un autre bloc. Ils sont appelés un bloc imbriqué. Les blocs imbriqués sont très courants lorsque nous voulons effectuer un certain processus, et en même temps, le code de ces processus doit être conservé dans un conteneur séparé (bloc).

Le concept de bloc imbriqué aidera le programmeur à améliorer la lisibilité en séparant les éléments complexes dans chaque bloc et à gérer l'exception pour chaque bloc à l'intérieur du bloc externe principal.

Dans ce didacticiel, vous apprendrez-

  • Structure de bloc imbriquée
  • Étendues dans un bloc imbriqué: étendue variable

Structure de bloc imbriquée

Un bloc peut être imbriqué dans un autre bloc. Cela peut être imbriqué dans la partie exécution ou dans la partie gestion des exceptions. Ces blocs peuvent également être étiquetés. Un bloc externe peut contenir plusieurs blocs internes. Chaque bloc interne est à nouveau un bloc PL / SQL, donc toutes les propriétés et caractéristiques du bloc interne seront les mêmes que celles du bloc externe. L'image ci-dessous donne la représentation picturale de la structure des blocs imbriqués. Le bloc parent est le bloc principal et le bloc enfant est le bloc imbriqué.

Vous trouverez ci-dessous la syntaxe du bloc imbriqué.

Syntaxe des blocs imbriqués

<>DECLAREBEGIN<>DECLAREBEGIN.EXCEPTIONEND;EXCEPTIONEND;
  • La syntaxe ci-dessus montre le bloc imbriqué qui contient un total de deux blocs.
  • Ces blocs sont étiquetés comme «bloc_externe» et «bloc_interne»

Étendues dans un bloc imbriqué: étendue variable

Dans un bloc imbriqué, il faut comprendre clairement la portée et la visibilité de chaque bloc avant de les utiliser. En particulier dans le bloc intérieur, les éléments à la fois du bloc extérieur et du bloc intérieur seront visibles. Par conséquent, une bonne compréhension de cela est nécessaire.

Les points ci-dessous résumeront plus en détail les portées dans les blocs imbriqués.

  • Les éléments déclarés dans le bloc externe et la valeur définie avant que la définition du bloc interne ne soit visible à l'intérieur du bloc interne.
  • Les éléments déclarés dans le bloc interne ne sont pas visibles dans le bloc externe. Ils ne sont visibles que dans le bloc intérieur.
  • Le bloc externe et le bloc interne peuvent avoir une variable du même nom.
  • Dans le cas de variables avec le même nom, le bloc interne par défaut fera référence à la variable déclarée dans le bloc interne uniquement.
  • Si le bloc interne veut faire référence à la variable de bloc externe qui porte le même nom que celui du bloc interne, alors le bloc externe doit être LABELED, et la variable de bloc externe peut être référencée comme '. '

L'exemple ci-dessous vous aidera à mieux comprendre ces portées.

Exemple 1 : Dans cet exemple, nous allons voir la portée des variables dans le bloc interne et externe. De plus, nous allons voir comment référencer les variables en utilisant l'étiquette de bloc.

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

Explication du code:

  • Ligne de code 1 : étiquetage du bloc externe comme "OUTER_BLOCK".
  • Ligne de code 3 : Déclarer une variable 'var1' comme VARCHAR2 (30) avec la valeur initiale de "bloc externe".
  • Ligne de code 4 : Déclarer une variable 'var2' comme VARCHAR2 (30) avec la valeur initiale de "valeur avant le bloc interne".
  • Ligne de code 6: étiquetage du bloc interne comme "INNER_BLOCK"
  • Ligne de code 8: Déclarer une variable 'var1' dans le bloc intérieur comme VARCHAR2 (30) avec la valeur initiale de "bloc intérieur".
  • Ligne de code 10: impression de la valeur de 'var1'. Puisqu'aucune étiquette n'est mentionnée par défaut, elle prendra la valeur d'un bloc interne, d'où l'impression du message 'inner_block'.
  • Ligne de code 11: Impression de la valeur de la variable de bloc externe 'var1'. Puisque le bloc interne a la variable avec le même nom, nous devons faire référence à l'étiquette de bloc externe. Impression du message «bloc externe».
  • Ligne de code 12: Impression de la valeur de la variable de bloc externe 'var2'. Puisqu'il n'y a pas de variable avec ce nom présente dans le bloc interne, elle prendra par défaut la valeur d'un bloc externe, d'où l'impression du message «valeur avant bloc interne».
  • La variable «var2» dans le bloc externe a été affectée à la valeur «valeur après le bloc interne». Mais cette affectation a eu lieu après la définition d'un bloc interne. Par conséquent, cette valeur n'est pas présente dans le bloc interne.

Exemple 2 : Dans cet exemple, nous allons trouver la différence entre deux nombres, un déclaré au bloc extérieur et un autre au bloc intérieur. Les deux auront le même nom. Voyons comment l'étiquette de bloc est utile pour référencer ces variables.

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

Explication du code:

  • Ligne de code 1 : étiquetage du bloc externe comme "OUTER_BLOCK".
  • Ligne de code 3 : Déclarer une variable 'ln_val' comme NUMBER avec la valeur initiale de "5".
  • Ligne de code 5: étiquetage du bloc interne comme "INNER_BLOCK"
  • Ligne de code 7: Déclarer une variable 'ln_val' dans le bloc interne comme NUMBER avec la valeur initiale de "3".
  • Ligne de code 9: Impression de la différence de valeur de 'ln_val' entre le bloc externe et interne. Le format ". " est utilisé pour faire référence à ces variables afin d'éviter les conflits dus au même nom de variable.

Résumé

Dans ce didacticiel, nous avons appris à créer un bloc imbriqué et à gérer la portée dans le bloc interne et les blocs externes. Nous avons également vu un exemple où les variables du bloc interne et externe étaient référencées à l'intérieur du bloc interne.