Portée variable PL/SQL et bloc externe interne : structure imbriquée

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 blocs imbriqués. Les blocs imbriqués sont très courants lorsque nous souhaitons exécuter 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 blocs imbriqués aidera le programmeur à améliorer la lisibilité en séparant les complex les choses dans chaque bloc et gérer l’exception pour chaque bloc à l’intérieur du bloc externe principal.

Structure de blocs imbriqués

Un bloc peut être imbriqué dans un autre bloc. Celui-ci peut être imbriqué soit dans la partie exécution, soit dans la gestion des exceptions partie. Ces blocs peuvent également être étiquetés. Un bloc externe peut contenir plusieurs blocs internes. Chaque bloc intérieur 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é.

Structure de blocs imbriqués

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

Structure de blocs imbriqués

Syntaxe des blocs imbriqués

<<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;
  • La syntaxe ci-dessus montre le bloc imbriqué qui contient un total de deux blocs.
  • Ces blocs sont étiquetés comme « outer_block » et « inner_block »

Portées dans un bloc imbriqué : portée variable

Dans les blocs imbriqués, 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 du bloc extérieur et intérieur seront visibles. Il est donc nécessaire de bien comprendre cela.

Les points ci-dessous résumeront davantage les portées dans les blocs imbriqués.

  • Les éléments déclarés dans le bloc externe et la valeur définie avant la définition du bloc interne sont visibles à 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 qu'à l'intérieur du bloc intérieur.
  • Le bloc externe et le bloc interne peuvent avoir une variable du même nom.
  • Dans le cas de variables portant 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 LABELLED et la variable de bloc externe peut être référencée comme ' . '

L'exemple ci-dessous aidera à mieux comprendre ces étendues.

Exemple 1: Dans cet exemple, nous allons voir la portée des variables dans le bloc interne et externe. Nous allons également voir comment référencer les variables à l’aide de l’étiquette de bloc.

Portées dans un bloc imbriqué

<<OUTER_BLOC>>
DECLARE
varl VARCHAR2(30):='outer_block';
var2 VARCHAR2(30):='value before inner block’;
BEGIN
<<NNER_BLOCK>>
DECLARE
varl VARCHAR2(30):='inner_block';
BEGIN
dbms_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: Étiqueter le bloc externe comme « OUTER_BLOCK ».
  • Ligne de code 3: Déclaration d'une variable 'var1' comme VARCHAR2 (30) avec la valeur initiale de « bloc externe ».
  • Ligne de code 4: Déclaration d'une variable 'var2' comme VARCHAR2 (30) avec la valeur initiale de « valeur avant le bloc interne ».
  • Ligne de code 6 : Étiqueter le bloc intérieur comme « INNER_BLOCK »
  • Ligne de code 8 : Déclarer une variable 'var1' dans le bloc interne comme VARCHAR2 (30) avec la valeur initiale de « bloc interne ».
  • 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, imprimant ainsi le message 'inner_block'.
  • Ligne de code 11 : Impression de la valeur de la variable de bloc externe 'var1'. Puisque le bloc interne porte la variable du même nom, nous devons nous référer à l’étiquette du bloc externe. Imprimant ainsi le message 'bloc extérieur'.
  • Ligne de code 12 : Impression de la valeur de la variable de bloc externe 'var2'. Puisqu'il n'y a aucune variable portant ce nom présente dans le bloc interne, par défaut, elle prendra la valeur d'un bloc externe, imprimant ainsi le message « valeur avant le bloc interne ».
  • La variable 'var2' dans le bloc externe a reçu la valeur 'value after inner block'. Mais cette affectation s'est produite après la définition d'un bloc interne. Cette valeur n'est donc 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 externe et un autre au bloc interne. Les deux porteront le même nom. Voyons comment l'étiquette de bloc est utile pour faire référence à ces variables.

Portées dans un bloc imbriqué

<<OUTER_BLOC>>
DECLARE 
ln_val NUMBER :=5;
BEGIN
<<INNERBLOC>>
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;
/

Explication du code :

  • Ligne de code 1: Étiqueter le bloc externe comme « OUTER_BLOCK ».
  • Ligne de code 3: Déclaration d'une variable 'ln_val' sous la forme NUMBER avec la valeur initiale de « 5 ».
  • Ligne de code 5 : Étiqueter le bloc intérieur comme « INNER_BLOCK »
  • Ligne de code 7 : Déclarer une variable 'ln_val' dans le bloc interne sous la forme NUMBER avec la valeur initiale de « 3 ».
  • Ligne de code 9 : Impression de la différence de valeur de 'ln_val' entre les blocs externe et interne. Le " . 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 comment créer un bloc imbriqué et comment gérer la portée dans le bloc interne et les blocs externes. Nous avons également vu un exemple où les variables des blocs interne et externe étaient référencées à l'intérieur du bloc interne.