Alcance variable PL / SQL & Bloque exterior interior: estructura anidada

¿Qué es Oracle Nested Blocks?

En PL / SQL, cada bloque se puede anidar en otro bloque. Se denominan bloque anidado. Los bloques anidados son muy comunes cuando queremos realizar un determinado proceso y, al mismo tiempo, el código para estos procesos debe mantenerse en un contenedor separado (bloque).

El concepto de bloque anidado ayudará al programador a mejorar la legibilidad al separar las cosas complejas en cada bloque y manejar la excepción para cada bloque dentro del bloque exterior principal.

En este tutorial, aprenderá:

  • Estructura de bloque anidado
  • Ámbitos en bloque anidado: ámbito variable

Estructura de bloque anidado

Un bloque se puede anidar en otro bloque. Esto se puede anidar en la parte de ejecución o en la parte de manejo de excepciones. Estos bloques también se pueden etiquetar. Un bloque externo puede contener muchos bloques internos. Cada bloque interno vuelve a ser un bloque PL / SQL, por lo que todas las propiedades y características del bloque interno serán las mismas que las del bloque externo. La siguiente imagen muestra la representación gráfica de la estructura de bloques anidados. El bloque padre es el bloque principal y el bloque hijo es el bloque anidado.

A continuación se muestra la sintaxis del bloque anidado.

Sintaxis de bloques anidados

<>DECLAREBEGIN<>DECLAREBEGIN.EXCEPTIONEND;EXCEPTIONEND;
  • La sintaxis anterior muestra el bloque anidado que contiene un total de dos bloques.
  • Estos bloques están etiquetados como 'bloque_externo' y 'bloque_interior'

Ámbitos en bloque anidado: ámbito variable

En el bloque anidado, es necesario comprender claramente el alcance y la visibilidad de cada bloque antes de usarlos. Particularmente en el bloque interior, los elementos tanto del bloque exterior como del interior serán visibles, por lo que es necesaria una comprensión adecuada de esto.

Los siguientes puntos resumirán más sobre los alcances en bloques anidados.

  • Los elementos declarados en el bloque externo y el valor que se define antes de la definición del bloque interno son visibles dentro del bloque interno.
  • Los elementos declarados en el bloque interior no son visibles en el bloque exterior. Son visibles solo dentro del bloque interior.
  • El bloque externo y el bloque interno pueden tener una variable con el mismo nombre.
  • En el caso de variables con el mismo nombre, el bloque interno por defecto hará referencia a la variable declarada en el bloque interno únicamente.
  • Si el bloque interno quiere hacer referencia a la variable del bloque externo que tiene el mismo nombre que el del bloque interno, entonces el bloque externo debe estar ETIQUETADO y la variable del bloque externo puede denominarse '. '

El siguiente ejemplo ayudará a comprender más sobre estos ámbitos.

Ejemplo 1 : En este ejemplo, veremos el alcance de las variables en el bloque interno y externo. Además, veremos cómo referir las variables usando la etiqueta de bloque.

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

Explicación del código:

  • Línea de código 1 : etiquetado del bloque exterior como "OUTER_BLOCK".
  • Línea de código 3 : Declarar una variable 'var1' como VARCHAR2 (30) con el valor inicial de "bloque externo".
  • Línea de código 4 : Declarando una variable 'var2' como VARCHAR2 (30) con el valor inicial de "valor antes del bloque interno".
  • Línea de código 6: etiquetar el bloque interno como "INNER_BLOCK"
  • Línea de código 8: Declarando una variable 'var1' en el bloque interno como VARCHAR2 (30) con el valor inicial de "bloque interno".
  • Línea de código 10: Imprimiendo el valor de 'var1'. Dado que no se menciona ninguna etiqueta de forma predeterminada, tomará el valor de un bloque interno, por lo que se imprimirá el mensaje 'inner_block'.
  • Línea de código 11: Imprimiendo el valor de la variable de bloque exterior 'var1'. Dado que el bloque interno tiene la variable con el mismo nombre, debemos referirnos a la etiqueta del bloque externo. Imprimiendo así el mensaje 'bloque exterior'.
  • Línea de código 12: Imprimiendo el valor de la variable de bloque exterior 'var2'. Dado que no hay una variable con este nombre presente en el bloque interno, por defecto tomará el valor de un bloque externo, por lo tanto imprimirá el mensaje 'valor antes del bloque interno'.
  • A la variable 'var2' en el bloque externo se le ha asignado el valor 'valor después del bloque interno'. Pero esta asignación ha ocurrido después de la definición de un bloque interno. Por tanto, este valor no está presente en el bloque interior.

Ejemplo 2 : En este ejemplo, vamos a encontrar la diferencia entre dos números, uno declarado en el bloque externo y otro en el bloque interno. Ambos tendrán el mismo nombre. Veamos cómo la etiqueta de bloque es útil para referir estas 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;/

Explicación del código:

  • Línea de código 1 : etiquetado del bloque exterior como "OUTER_BLOCK".
  • Línea de código 3 : Declarar una variable 'ln_val' como NUMBER con el valor inicial de "5".
  • Línea de código 5: etiquetar el bloque interno como "INNER_BLOCK"
  • Línea de código 7: Declarando una variable 'ln_val' en el bloque interno como NUMBER con el valor inicial de "3".
  • Línea de código 9: Impresión de la diferencia en el valor de 'ln_val' del bloque exterior e interior. El formato ". " se utiliza para referir estas variables para evitar conflictos debido al mismo nombre de variable.

Resumen

En este tutorial, hemos aprendido cómo crear un bloque anidado y cómo manejar el alcance en bloques internos y externos. También hemos visto un ejemplo en el que las variables del bloque interno y externo se referían al interior del bloque interno.

Articulos interesantes...