Documentos de Académico
Documentos de Profesional
Documentos de Cultura
SQL
2-6
Bloques anidados y alcance variable
PLSQL 2-6
Bloques anidados y alcance variable
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 3
Propósito
PLSQL 2-6
Bloques anidados y alcance variable
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 4
Bloques anidados
PLSQL 2-6
Bloques anidados y alcance variable
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 5
Bloques anidados ilustrados
PLSQL 2-6
Bloques anidados y alcance variable
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 6
Ejemplo de bloque anidado
PLSQL 2-6
Bloques anidados y alcance variable
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 7
Ejemplo de bloque anidado
DECLARE
v_outer_variable VARCHAR2 (20) : = 'VARIABLE GLOBAL’;
BEGIN
DECLARE
v_inner_variable VARCHAR2 (20) : = 'VARIABLE LOCAL’;
BEGIN
DBMS_OUTPUT.PUT_LINE (v_inner_variable);
DBMS_OUTPUT.PUT_LINE (v_outer_variable);
END;
DBMS_OUTPUT.PUT_LINE (v_outer_variable);
END;
PLSQL 2-6
Bloques anidados y alcance variable
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 8
Alcance variable
•El alcance de una variable es el bloque o bloques en los que la variable
es accesible, es decir, donde se puede utilizar.
•En PL / SQL, el alcance de una variable es el bloque en el que se declara
más todos los bloques anidados dentro del bloque declarante
PLSQL 2-6
Bloques anidados y alcance variable
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 9
Alcance variable
•¿Cuáles son los alcances de las dos variables declaradas en este
ejemplo?
DECLARE
v_outer_variable VARCHAR2 (20) : = 'VARIABLE GLOBAL';
BEGIN
DECLARE
v_inner_variable VARCHAR2 (20) : = 'VARIABLE LOCAL';
BEGIN
DBMS_OUTPUT.PUT_LINE (v_inner_variable);
DBMS_OUTPUT.PUT_LINE (v_outer_variable);
END;
DBMS_OUTPUT.PUT_LINE (v_outer_variable);
END;
PLSQL 2-6
Bloques anidados y alcance variable
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 10
Ejemplo de alcance variable
PLSQL 2-6
Bloques anidados y alcance variable
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 11
Variables locales y globales
•Las variables declaradas en un bloque PL / SQL se consideran locales para
ese bloque y globales para todos los bloques anidados dentro
eso
• V_outer_variable es local al bloque externo pero global al bloque
interno
DECLARE
v_outer_variable VARCHAR2(20):='GLOBAL VARIABLE';
BEGIN
DECLARE v_inner_variable VARCHAR2(20):='LOCAL VARIABLE';
BEGIN
DBMS_OUTPUT.PUT_LINE(v_inner_variable);
DBMS_OUTPUT.PUT_LINE(v_outer_variable);
END;
DBMS_OUTPUT.PUT_LINE(v_outer_variable);
END;
PLSQL 2-6
Bloques anidados y alcance variable
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 12
Variables locales y globales
•Cuando accede a esta variable en el bloque interno, PL / SQL primero
busca una variable local en el bloque interno con ese nombre
•Si no hay variables con nombres similares, PL / SQL busca
para la variable en el bloque exterior
DECLARE
v_outer_variable VARCHAR2(20) :='GLOBAL VARIABLE';
BEGIN
DECLARE
v_inner_variable VARCHAR2(20):='LOCAL VARIABLE';
BEGIN
DBMS_OUTPUT.PUT_LINE(v_inner_variable);
DBMS_OUTPUT.PUT_LINE(v_outer_variable);
END;
DBMS_OUTPUT.PUT_LINE(v_outer_variable);
END;
PLSQL 2-6
Bloques anidados y alcance variable
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 13
Variables locales y globales
•La variable v_inner_variable es local al bloque interno y no
es global porque el bloque interno no tiene bloques
anidados
•Solo se puede acceder a esta variable dentro del cuadro
DECLARE
v_outer_variable VARCHAR2(20):='GLOBAL VARIABLE';
BEGIN
DECLARE
v_inner_variable VARCHAR2(20):='LOCAL VARIABLE';
BEGIN
DBMS_OUTPUT.PUT_LINE(v_inner_variable);
DBMS_OUTPUT.PUT_LINE(v_outer_variable);
END;
DBMS_OUTPUT.PUT_LINE(v_outer_variable);
END;
PLSQL 2-6
Bloques anidados y alcance variable
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 14
Variables locales y globales
•Si PL / SQL no encuentra la variable declarada localmente, busca hacia
arriba en la sección declarativa de los bloques principales.
PLSQL 2-6
Bloques anidados y alcance variable
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 15
Alcance variable accesible al bloque exterior
•Las variables v_father_name y v_date_of_birth son
declarado en el bloque exterior
•Son locales al bloque exterior y globales al bloque
interior.
•Su alcance incluye ambos bloques
DECLARE
v_father_name VARCHAR2 (20): = 'Patrick';
v_date_of_birth DATE: = '20-Apr-1972 ';
BEGIN
DECLARAR
v_child_name VARCHAR2 (20): = 'Mike';
...
PLSQL 2-6
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. dieciséis
Bloques anidados y alcance variable
Alcance variable accesible al bloque exterior
•La variable v_child_name se declara en el bloque
interno (anidado)
•Esta variable es accesible solo dentro del bloque interno y no es
accesible en el bloque externo
DECLARE
v_father_name VARCHAR2 (20) := 'Patrick ';
v_date_of_birth DATE := '20-Apr-1972';
BEGIN
DECLARE
v_child_name VARCHAR2 (20) := 'Mike';
...
PLSQL 2-6
Bloques anidados y alcance variable
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 17
Un ejemplo de alcance
•¿Por qué este código no funcionará correctamente?
DECLARE
v_first_name VARCHAR2 (20);
BEGIN
DECLARE
v_last_name VARCHAR2 (20);
BEGIN
v_first_name: = 'Carmen';
v_last_name: = 'Miranda';
DBMS_OUTPUT.PUT_LINE
(v_first_name || ' ' || v_last_name);
END;
DBMS_OUTPUT.PUT_LINE
(v_first_name || ' ' || v_last_name);
END;
PLSQL 2-6
Bloques anidados y alcance variable
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 18
Un segundo ejemplo de alcance
PLSQL 2-6
Bloques anidados y alcance variable
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 19
Tres niveles de bloque anidado
•¿Cuál es el alcance de cada una de estas variables?
PLSQL 2-6
Bloques anidados y alcance variable
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 20
Nomenclatura variable
PLSQL 2-6
Bloques anidados y alcance variable
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 21
Ejemplo de denominación de variables
PLSQL 2-6
Bloques anidados y alcance variable
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 22
Visibilidad variable
•¿Qué pasa si se usa el mismo nombre para dos variables, una en cada uno
de los bloques?
DECLARE
v_father_name VARCHAR2(20) := 'Patrick';
v_date_of_birth DATE := '20-Apr-1972';
BEGIN
DECLARE
v_child_name VARCHAR2(20) := 'Mike';
v_date_of_birth DATE := '12-Dec-2002’;
BEGIN
DBMS_OUTPUT.PUT_LINE('Date of Birth:' || v_date_of_birth);
...
PLSQL 2-6
Bloques anidados y alcance variable
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 24
Visibilidad variable
•La visibilidad de una variable es la parte del programa donde
se puede acceder a la variable sin usar un calificador
•¿Cuál es la visibilidad de cada una de las variables?
DECLARE
v_father_name VARCHAR2(20):='Patrick';
v_date_of_birth DATE:='20-Apr-1972';
BEGIN
DECLARE
v_child_name VARCHAR2(20):='Mike';
v_date_of_birth DATE:='12-Dec-2002';
BEGIN
1 DBMS_OUTPUT.PUT_LINE('Father' 's Name: ' || v_father_name);
DBMS_OUTPUT.PUT_LINE('Date of Birth: ' || v_date_of_birth);
DBMS_OUTPUT.PUT_LINE('Child''s Name: ' || v_child_name);
END;
2 DBMS_OUTPUT.PUT_LINE('Date of Birth: ' || v_date_of_birth);
END;
PLSQL 2-6
Bloques anidados y alcance variable
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 25
Visibilidad variable
•La variable v_date_of_birth declarada en el bloque
externo tiene alcance incluso en el bloque interno
•Esta variable es visible en el bloque exterior
•Sin embargo, no es visible en el bloque interior porque el
El bloque interno tiene una variable local con el mismo nombre.
DECLARE
v_father_name VARCHAR2(20) := 'CPatrick';
v_date_of_birth DATE := '20-Apr-1972';
BEGIN
DECLARE
v_child_name VARCHAR2(20):='Mike';
v_date_of_birth DATE:='12-Dec-2002';
...
PLSQL 2-6
Bloques anidados y alcance variable
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 26
Visibilidad variable
• La variable v_father_name es visible en los bloques interior y exterior
• La variable v_child_name es visible solo en el bloque interno
•¿Qué sucede si desea hacer referencia a v_date_of_birth del
bloque externo dentro del bloque interno?
DECLARE
v_father_name VARCHAR2(20) := 'Patrick';
v_date_of_birth DATE := '20-Apr-1972';
BEGIN
DECLARE
v_child_name VARCHAR2(20) := 'Mike';
v_date_of_birth DATE := '12-Dec-2002';
PLSQL 2-6
Bloques anidados y alcance variable
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 27
Calificar un identificador
•Un calificador es una etiqueta que se le da a un bloque.
•Puede utilizar este calificador para acceder a las variables que tienen alcance
pero no son visibles
•El bloque exterior a continuación está etiquetado como <<outer>>
<<outer>>
DECLARE
v_father_name VARCHAR2 (20): = 'Patricio';
v_date_of_birth DATE := '20-Apr-1972';
BEGIN
DECLARE
v_child_name VARCHAR2 (20) := 'Mike';
v_date_of_birth DATE := '12-Dec-2002';
...
PLSQL 2-6
Bloques anidados y alcance variable
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 28
Calificar un identificador
•Usando la etiqueta exterior para calificar el identificador v_date_of_birth, ahora
puede imprimir la fecha de nacimiento del padre usando código en el bloque
interno
<<outer>>
DECLARE Nombre del padre: Patrick Fecha de
v_father_name VARCHAR2(20) := 'Patrick'; nacimiento: 20 de abril de 1972 Nombre
v_date_of_birth DATE := '20-Apr-1972'; del niño: Mike
DECLARE
v_child_name VARCHAR2(20):='Mike'; Declaración procesada.
v_date_of_birth DATE:='12-Dec-2002';
BEGIN
DBMS_OUTPUT.PUT_LINE('Father''s Name: ' || v_father_name);
DBMS_OUTPUT.PUT_LINE('Date of Birth: ' || outer.v_date_of_birth);
DBMS_OUTPUT.PUT_LINE('Child''s Name: ' || v_child_name);
DBMS_OUTPUT.PUT_LINE('Date of Birth: ' || v_date_of_birth);
END;
END;
PLSQL 2-6
Bloques anidados y alcance variable
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 29
Terminología
•Los términos clave utilizados en esta lección incluyen:
-Etiqueta de bloque
-Alcance variable
-Visibilidad variable
PLSQL 2-6
Bloques anidados y alcance variable
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 30
Resumen
•En esta lección, debería haber aprendido a:
-Comprender el alcance y la visibilidad de las variables.
-Escriba bloques anidados y califique variables con etiquetas
-Describir las reglas para el alcance de la variable cuando una variable
está anidada en un bloque.
-Reconocer un problema de alcance variable cuando una variable se usa
en bloques anidados
PLSQL 2-6
Bloques anidados y alcance variable
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 31