Sentencias de Control

Existen 3 Grupos de Sentencia de Control

*Condicional

*Iterativo

*Secuencial

Sentencia de Control Condicional (IF, THEN, ELSE)

É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.

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

Sentencia de Control Condicional Case

Permite evaluar diferentes opciones, por cada opción se realiza una instrucción específica. Veamos un ejemplo:

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;

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 Iterativa FOR-LOOP

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.

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

Sentencia de Control Iterativa WHILE-LOOP

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:

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

Sentencia de Control Iterativa LOOP

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:

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

Sentencia de Control Secuencial GOTO

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:

DECLARE
V_TOTAL NUMBER(9) := 0;
V_CONTADOR NUMBER(6) := 0;

BEGIN
<<calcular>>
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

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

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.