Programación de bases de datos con
PL / SQL
4-5
Control iterativo: bucles anidados
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos.
Objetivos
• Esta lección cubre los siguientes objetivos:
-Construya y ejecute PL / SQL usando bucles anidados
-Etiquete los bucles y use las etiquetas en las declaraciones EXIT
-Evaluar una construcción de bucle anidado e identificar el punto de salida
PLSQL 4-5
Control iterativo: bucles anidados
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 3
Propósito
• Ha aprendido acerca de las construcciones en bucle en PL / SQL
• Esta lección analiza cómo se pueden anidar bucles en
varios niveles.
• Puede anidar FOR, WHILE y bucles básicos entre
sí
PLSQL 4-5
Control iterativo: bucles anidados
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 4
Ejemplo de bucle anidado
• En PL / SQL, puede anidar bucles en varios niveles
• Puede anidar FOR, WHILE y bucles básicos entre
sí
COMENZAR
PARA v_outerloop EN 1..3 BUCLE
FOR v_innerloop IN REVERSE 1..5 LOOP
DBMS_OUTPUT.PUT_LINE ('El bucle externo es:' ||
v_outerloop ||
'y el bucle interior es:' ||
v_innerloop);
END LOOP;
END LOOP;
FIN;
PLSQL 4-5
Control iterativo: bucles anidados
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 5
Bucles anidados
• Este ejemplo contiene condiciones EXIT en bucles básicos
anidados
• ¿Qué sucede si desea salir del bucle exterior en el paso A?
DECLARAR
v_outer_done CHAR (3): = 'NO';
v_inner_done CHAR (3): = 'NO';
COMENZAR
LAZO - - lazo exterior
...
LAZO - - lazo interior
...
... - - paso A
SALIR CUANDO v_inner_done = 'SÍ';
...
END LOOP;
...
SALIR CUANDO v_outer_done = 'SÍ';
...
END LOOP;
FIN;
PLSQL 4-5
Control iterativo: bucles anidados
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 6
Etiquetas de bucle
• Las etiquetas de bucle son necesarias en este ejemplo para salir
un bucle exterior desde dentro de un bucle interior
DECLARAR
...
COMENZAR
<<outer_loop>>
LAZO - - lazo exterior
...
<<inner_loop>>
LAZO - - lazo interior
SALIDA bucle_externo CUANDO ... - sale de ambos bucles
SALIR CUANDO v_inner_done = 'SÍ';
...
END LOOP;
...
SALIR CUANDO v_outer_done = 'SÍ'; END ...
LOOP;
FIN;
PLSQL 4-5
Control iterativo: bucles anidados
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 7
Etiquetas de bucle
• Los nombres de las etiquetas de bucle siguen las mismas reglas que otros
identificadores
• Se coloca una etiqueta antes de una declaración, ya sea en la
misma línea o en una línea separada
• En los bucles FOR o WHILE, coloque la etiqueta antes de FOR o WHILE
dentro de los delimitadores de etiquetas (<<label>>)
• Si el bucle está etiquetado, el nombre de la etiqueta se puede incluir
opcionalmente después de la declaración END LOOP para mayor claridad.
PLSQL 4-5
Control iterativo: bucles anidados
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 8
Etiquetas de bucle
• Etiquete los bucles básicos colocando la etiqueta antes de la palabra LOOP
dentro de los delimitadores de etiquetas (<<label>>)
DECLARAR
v_outerloop PLS_INTEGER: = 0;
v_innerloop PLS_INTEGER: = 5;
COMENZAR
<<outer_loop>>
LAZO
v_outerloop: = v_outerloop + 1;
v_innerloop: = 5;
SALIR CUANDO v_outerloop> 3;
<<inner_loop>>
LAZO
DBMS_OUTPUT.PUT_LINE ('El bucle externo es:' || v_outerloop ||
'y el bucle interior es:' || v_innerloop);
v_innerloop: = v_innerloop - 1; SALIR
CUANDO v_innerloop = 0; FIN DE BUCLE
bucle_interior; FIN DE BUCLEbucle_externo;
FIN;
PLSQL 4-5
Control iterativo: bucles anidados
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 9
Lazos y etiquetas anidados
• En este ejemplo, hay dos bucles
• El bucle externo se identifica con la etiqueta
<<outer_loop>>, y el bucle interno se identifica con el
etiqueta <<inner_loop>>
• Hacemos referencia al bucle externo en la declaración EXIT
desde dentro del
bucle_interior
PLSQL 4-5
Control iterativo: bucles anidados
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 10
Lazos y etiquetas anidados
. . . COMENZAR
<<outer_loop>>
LAZO
contador_v: = contador_v + 1;
SALIR CUANDO v_counter> 10;
<<inner_loop>>
LAZO . . .
SALIDA bucle_externo CUANDO v_total_done = 'SÍ';
- - Deja ambos bucles
SALIR CUANDO v_inner_done = 'SÍ';
- - Deje solo el bucle interior. . .
FIN DE BUCLE bucle_interior; . . .
FIN DE BUCLE bucle_externo
; FIN;
PLSQL 4-5
Control iterativo: bucles anidados
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 11
Terminología
• Los términos clave utilizados en esta lección incluyen:
-Delimitadores de etiquetas
-Etiqueta de bucle
PLSQL 4-5
Control iterativo: bucles anidados
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 12
Resumen
• En esta lección, debería haber aprendido a:
-Construya y ejecute PL / SQL usando bucles anidados
-Etiquete los bucles y use las etiquetas en las declaraciones EXIT
-Evaluar una construcción de bucle anidado e identificar el punto de salida
PLSQL 4-5
Control iterativo: bucles anidados
Copyright © 2020, Oracle y / o sus afiliados. Reservados todos los derechos. 13