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 elTHEN
y 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 aTRUE
y 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 aTRUE
ejecutamos la secuencia de sentencias 2 y así para todos losELSIF
que haya. El últimoELSE
es 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