Portée variable PL/SQL et bloc externe interne : structure imbriquée
⚡ Résumé intelligent
En PL/SQL, les blocs imbriqués permettent de placer un bloc à l'intérieur d'un autre, ce qui facilite la séparation des logiques complexes et l'isolation de la gestion des exceptions. La compréhension de la portée des variables entre les blocs externes et internes, ainsi que l'utilisation d'étiquettes de blocs, garantissent l'absence d'ambiguïté entre les variables portant le même nom.
Qu'est-ce que les blocs imbriqués Oracle?
In PL / SQLChaque bloc peut être imbriqué dans un autre. Un tel bloc est appelé un bloc imbriqué. Les blocs imbriqués sont très courants lorsque vous souhaitez effectuer un certain processus tout en conservant…ping le code de ce processus dans un conteneur séparé (bloc).
Le concept de blocs imbriqués aide le programmeur à améliorer la lisibilité en séparant la logique complexe en blocs individuels, et il permet exception pour chaque bloc à traiter à l'intérieur du bloc extérieur principal.
Structure de blocs imbriqués
Un bloc peut être imbriqué dans un autre. Il peut être imbriqué soit dans la partie d'exécution, soit dans la partie de gestion des exceptions, et ces blocs peuvent également être étiquetés. Un bloc externe peut contenir plusieurs blocs internes. Chaque bloc interne est lui-même un Bloc PL/SQLAinsi, toutes les propriétés et caractéristiques du bloc interne sont identiques à celles du bloc externe. Le bloc parent est le bloc principal, et le bloc enfant est le bloc imbriqué.
L'image ci-dessous donne une représentation graphique de la structure de blocs imbriqués, dans laquelle le bloc parent est le bloc principal et le bloc enfant est le bloc imbriqué.
Voici la syntaxe du bloc imbriqué. La capture d'écran ci-dessous illustre cette syntaxe, avec ses blocs externe et interne clairement identifié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 « outer_block » et « inner_block ».
Portées dans un bloc imbriqué : portée variable
Dans un bloc imbriqué, il est essentiel de bien comprendre la portée et la visibilité de chaque bloc avant de les utiliser. En particulier, dans le bloc interne, les éléments des blocs externe et interne sont visibles ; il est donc important de bien comprendre ce fonctionnement.
Les points ci-dessous résument les portées dans les blocs imbriqués.
- Les éléments déclarés dans le bloc extérieur, ainsi que la valeur définie avant la définition du bloc intérieur, sont visibles à l'intérieur du bloc intérieur.
- 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 interne.
- Le bloc extérieur et le bloc intérieur peuvent avoir un variable avec le même nom.
- Dans le cas de variables portant le même nom, le bloc interne fait par défaut référence uniquement à la variable déclarée dans ce bloc interne.
- Si le bloc interne souhaite faire référence à la variable du bloc externe qui porte le même nom que la variable du bloc interne, alors le bloc externe doit être étiqueté, et la variable du bloc externe peut être référencée comme ' . '.
L'exemple ci-dessous vous aidera à mieux comprendre ces portées.
Exemple 1: Cet exemple illustre la portée des variables dans les blocs interne et externe. Il montre également comment y faire référence à l'aide d'une étiquette de bloc.
La capture d'écran ci-dessous illustre l'exemple 1, où le bloc interne fait référence à une variable de bloc externe à l'aide de l'étiquette du bloc.
<<OUTER_BLOCK>> DECLARE var1 VARCHAR2(30):='outer_block'; var2 VARCHAR2(30):='value before inner block'; BEGIN <<INNER_BLOCK>> DECLARE var1 VARCHAR2(30):='inner_block'; BEGIN dbms_output.put_line(var1); dbms_output.put_line(OUTER_BLOCK.var1); dbms_output.put_line(var2); END; var2:='value after inner block'; END; /
Code Explication:
- Code ligne 1: Nommer le bloc extérieur « OUTER_BLOCK ».
- Code ligne 3: Déclaration d'une variable 'var1' comme VARCHAR2 (30) avec la valeur initiale de «outer_block».
- Code ligne 4: Déclaration d'une variable 'var2' comme VARCHAR2 (30) avec la valeur initiale de « valeur avant bloc interne ».
- Code ligne 6: Nommer le bloc intérieur « INNER_BLOCK ».
- Code ligne 8: Déclarer une variable 'var1' dans le bloc interne comme VARCHAR2 (30) avec la valeur initiale de « inner_block ».
- Code ligne 10: Affichage de la valeur de « var1 ». Comme aucune étiquette n'est spécifiée, la valeur par défaut est celle du bloc interne, d'où l'affichage du message « inner_block ».
- Code ligne 11: Affichage de la valeur de la variable « var1 » du bloc externe. Le bloc interne possédant une variable du même nom, nous faisons référence à l'étiquette du bloc externe. Le message « outer_block » s'affiche donc.
- Code ligne 12: Affichage de la valeur de la variable « var2 » du bloc externe. Comme aucune variable de ce nom n'existe dans le bloc interne, la valeur par défaut est celle du bloc externe, d'où l'affichage du message « valeur avant le bloc interne ».
- La variable « var2 » du bloc externe se voit attribuer la valeur « valeur après le bloc interne ». Cependant, cette attribution a lieu après la définition du bloc interne ; par conséquent, cette valeur n'est pas présente à l'intérieur de ce dernier.
Exemple 2: Dans cet exemple, nous calculons la différence entre deux nombres, l'un déclaré dans le bloc extérieur et l'autre dans le bloc intérieur. Ils portent le même nom. Voyons comment l'étiquette du bloc permet de faire référence à ces variables.
La capture d'écran ci-dessous montre l'exemple 2, qui calcule la différence entre les variables de bloc externe et interne portant le même nom.
<<OUTER_BLOCK>> DECLARE ln_val NUMBER :=5; BEGIN <<INNER_BLOCK>> 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; /
Code Explication:
- Code ligne 1: Nommer le bloc extérieur « OUTER_BLOCK ».
- Code ligne 3: Déclaration d'une variable 'ln_val' de type NUMBER avec la valeur initiale « 5 ».
- Code ligne 5: Nommer le bloc intérieur « INNER_BLOCK ».
- Code ligne 7: Déclarer une variable 'ln_val' dans le bloc interne comme NUMBER avec la valeur initiale « 3 ».
- Code ligne 9: Affichage de la différence de valeur de 'ln_val' entre le bloc externe et le bloc interne. Le « . Le format « » est utilisé pour faire référence à ces variables afin d’éviter les conflits dus à des noms de variables identiques.





