En programación, las sentencias de control son fundamentales para dirigir el flujo de ejecución del código. Existen tres tipos principales: iterativas, condicionales y secuenciales.
Permiten cambiar el flujo de ejecución las instrucciones de nuestro código SQL.
Es así como se puede indicar la ejecución de un bloque de instrucciones cuando se cumpla una condición o simplemente hacer que se repita en tiempo de ejecución.
Referencias Bibliográficas:
1) Página Web El baúl del programador. Sentencias de Control SQL. Recuperado el 07 de noviembre del 2020 de: https://elbauldelprogramador.com/plsql-estructuras-basicas-de-control/
2) Página Web Jean Mazuelos. Sentencias de Control Base de Datos. Recuperado el 07 de noviembre del 2020 de: https://jeanmazuelos.com/biblioteca/cursos/oracle-plsql-basico/capitulo-4-sentencias-de-control#:~:text=Las%20sentencias%20de%20control%20permiten,repita%20en%20tiempo%20de%20ejecuci%C3%B3n.
3) Página Web BIRTLH. Programación de base de datos. Recuperado el 07 de Noviembre del 2020 de: https://ikastaroak.birt.eus/edu/argitalpen/backupa/20200331/1920k/es/DAMDAW/BD/BD07/es_DAMDAW_BD07_Contenidos/website_24_estructuras_de_control_i.html
l
Sentencia de Control Secuencial GOTO
DECLARE
V_TOTAL NUMBER(9) := 0;
V_CONTADOR NUMBER(6) := 0;
BEGIN
<>
V_CONTADOR := V_CONTADOR + 1;
V_TOTAL := V_TOTAL + V_CONTADOR;
IF V_TOTAL <= 20 THEN
DBMS_OUTPUT.PUT_LINE('Valor de V_TOTAL:' || V_TOTAL);
GOTO calcular;
END IF;
END;
Valor de V_TOTAL:1
Valor de V_TOTAL:3
Valor de V_TOTAL:6
Valor de V_TOTAL:10
Valor de V_TOTAL:15
permite cambiar la línea secuencial de la ejecución hacia una etiqueta. Las etiquetas son marcadas con los símbolos << y >>. Para ir dirigir la ejecución hacia una etiqueta simplemente hay que usar la sentencia GOTO:
Sentencia de Control Iterativa LOOP
DECLARE
V_TOTAL NUMBER := 0;
V_CONTADOR NUMBER := 0;
BEGIN
LOOP
V_CONTADOR := V_CONTADOR + 1;
V_TOTAL := V_TOTAL + V_CONTADOR;
DBMS_OUTPUT.PUT_LINE('Valor de V_TOTAL:' || V_TOTAL);
EXIT WHEN V_TOTAL > 20;
END LOOP;
END;
Valor de V_TOTAL:1
Valor de V_TOTAL:3
Valor de V_TOTAL:6
Valor de V_TOTAL:10
Valor de V_TOTAL:15
Valor de V_TOTAL:21
Permite ejecutar un bloque de código de manera infinita, a diferencia de las otras sentencias iterativas, en la sentencia LOOP se debe utilizar la cláusula EXIT WHEN para colocar una condición para terminar el bucle:
Sentencia de Control Iterativa WHILE-LOOP
DECLARE
V_NUM NUMBER := 1;
BEGIN
WHILE V_NUM <= 13 LOOP
DBMS_OUTPUT.PUT_LINE('El valor V_NUM es :' || V_NUM);
V_NUM := V_NUM + 2.1;
END LOOP;
END;
El valor V_NUM es :1
El valor V_NUM es :3,1
El valor V_NUM es :5,2
El valor V_NUM es :7,3
El valor V_NUM es :9,4
El valor V_NUM es :11,5
Al igual que FOR-LOOP, permite la ejecución de una o varias instrucciones. A diferencia de la sentencia FOR-LOOP, en WHILE-LOOP la ejecución se define a partir de una condición. Veamos un ejemplo:
Sentencia de Control Iterativa FOR-LOOP
FOR i IN 1..8 LOOP
DBMS_OUTPUT.PUT_LINE('El número de ésta iteración es:' || i);
END LOOP;
END;
El número de ésta iteración es:1
El número de ésta iteración es:2
El número de ésta iteración es:3
El número de ésta iteración es:4
El número de ésta iteración es:5
El número de ésta iteración es:6
El número de ésta iteración es:7
El número de ésta iteración es:8
La sentencia FOR-LOOP permite especificar un rango de números enteros, finalmente ejecuta una secuencia de instrucciones para cada número entero dentro de la lista de números.
Sentencia de Control Iterativo
Las sentencias iterativas permiten ejecutar varias instrucciones múltiples veces. A éstas sentencias también se les conoce por el nombre de bucles repetitivos.
Sentencia de Control Condicional Case
CREATE TABLE C2(
Nombre VARCHAR2(20 ),
EC VARCHAR2(1)
);
COMMIT;
INSERT INTO C2 ( NOMBRE, EC ) VALUES ('Juan ', 'S');
INSERT INTO C2 ( NOMBRE, EC ) VALUES ('Maria', 'C');
INSERT INTO C2 ( NOMBRE, EC ) VALUES ('Ana', 'D');
INSERT INTO C2 ( NOMBRE, EC ) VALUES ('Luis', 'S');
INSERT INTO C2 ( NOMBRE, EC ) VALUES ('Pepe', NULL);
COMMIT;
SELECT Nombre, CASE EC
WHEN 'C' THEN 'Casado/a'
WHEN 'S' THEN 'Soltero/a'
WHEN 'D' THEN 'Divorciado/a'
ELSE 'Otros'
END
AS "Estado Civil"
FROM C2;
Permite evaluar diferentes opciones, por cada opción se realiza una instrucción específica. Veamos un ejemplo:
Sentencia de Control Condicional (IF, THEN, ELSE)
IF condicion THEN
instrucciones;
ELSE
IF condicion2 THEN
instrucciones;
ELSE
IF condicion3 THEN
instrucciones;
END IF;
END IF;
END IF;
IF apellido =„Pérez‟ THEN
salario:= salario *1.10; --aumento de salario en un 10%
ELSIF apellido =‘Martínez’ THEN
salario:= salario *1.15; --aumento de salario en un 15%
ELSIF apellido=‘Alvarez’ THEN
salario:= salario *1.20; --aumento de salario en un 20%
ELSE
salario:= salario* 1.05; --aumento de salario en un 5%
END IF; --Sólo se necesita un único END IF
Ésta sentencia permite la ejecución de una o varias líneas de código según una condición. La condición se especifica en la cláusula IF, en caso de que la condición sea verdadera se ejecuta el bloque de código especificado bajo la cláusula THEN, en caso contrario se ejecuta el bloque de código especificado en la cláusula ELSE.