En la vida constantemente tenemos que tomar decisiones que hacen que llevemos a cabo unas acciones u otras dependiendo de unas circunstancias o repetir una serie de acciones un número dado de veces o hasta que se cumpla una condición. En PL/SQL también podemos imitar estas situaciones por medio de las estructuras de control que son sentencias que nos permiten manejar el flujo de control de nuestro programa, y éstas son dos: condicionales e iterativas.
Control condicional.
Las estructuras de control condicional nos permiten llevar a cabo una acción u otra dependiendo de una condición. Prueba los ejemplos para entender bien el funcionamiento. El caracter / que aparece al final se utiliza para ejecutar el bloque desde SQLPlus.
SENTENCIA IF. Sus variantes son:
Sentencia IF-THEN: Forma más simple de las sentencias de control condicional. Si la evaluación de la condición esTRUE, entonces se ejecuta la secuencia de sentencias encerradas entre elTHENy el final de la sentencia.
Sintaxis:
IF condicion THEN
secuencia_de_sentencias;
END IF;
Ejemplo:
SET SERVEROUTPUT ON
DECLARE a integer:=10;
B integer:=7;
BEGIN
IF a>b
THEN dbms_output.put_line(a || ' es mayor'); -- Como la función put_line solo imprime un valor utilizamos la concatenación || para que sea un único valor
END IF;
END;
/
Sentencia IF-THEN-ELSE: Con esta forma de la sentencia ejecutaremos la primera secuencia de sentencias si la condición se evalúa aTRUEy en caso contrario ejecutaremos la segunda secuencia de sentencias.
Sintaxis:
IF condicion
THEN Secuencia_de_sentencias1;
ELSE Secuencia_de_sentencias2;
END IF;
Ejemplo:
DECLARE
a integer:=10;
b integer:=17;
BEGIN
IF a>b THEN
dbms_output.put_line(a || ' es mayor');
ELSE
dbms_output.put_line(b || ' es mayor o iguales');
END IF;
END;
/
Sentencia IF-THEN-ELSIF: Con esta última forma de la sentencia condicional podemos hacer una selección múltiple. Si la evaluación de la condición 1 daTRUE, ejecutamos la secuencia de sentencias 1, sino evaluamos la condición 2. Si esta evalúa aTRUEejecutamos la secuencia de sentencias 2 y así para todos losELSIFque haya. El últimoELSEes opcional y es por si no se cumple ninguna de las condiciones anteriores.
Sintaxis:
IF condicion1 THEN
Secuencia_de_sentencias1;
ELSIF condicion2 THEN
Secuencia_de_sentencias2;
...
[ELSE
Secuencia_de_sentencias;]
END IF;
Ejemplo:
IF (operacion = ‘SUMA’) THEN
resultado := arg1 + arg2;
ELSIF (operacion = ‘RESTA’) THEN
resultado := arg1 – arg2;
ELSIF (operacion = ‘PRODUCTO’) THEN
resultado := arg1 * arg2;
ELSIF (arg2 <> 0) AND (operacion = ‘DIVISION’) THEN
resultado := arg1 / arg2;
ELSE
RAISE operacion_no_permitida; -- Lanza un error de ejecución
END IF;
/
Se llama flujo de control al orden en el que se ejecutan las instrucciones de un programa, siendo las propias instrucciones las que determinan o controlan dicho flujo. En un programa, a menos que el flujo de control se vea modificado por una instrucción de control, las instrucciones siempre se ejecutan secuencialmente, una detrás de otra