En el lenguaje PL/SQL contamos con ciertas instrucciones las cuales nos sirven para poder controlar el orden de ejecución de las sentencias como le indiquemos o en función del valor de ciertas variables.
IF <condicion1> THEN
<sentencias1>
[ELSIF <condicion2> THEN <sentencias2>]
[ELSE <sentencias3>]
END IF;
Si <condicion1> se cumple, se ejecutarán las <sentencias1>. En el caso de que no se cumpla, si existe un ELSIF, se evalúa <condicion2> y si se cumple se ejecutará <sentencias2>. En el caso de que no se cumpla la condición, si existe, se ejecutarán las instrucciones que haya entre ELSE y END IF, es decir, <sentencias3>. Siempre debemos de finalizar un bloque IF con un END IF. Se pueden encadenar tantos IF y ELSIF como necesitemos.
Para el control de flujo mediante bucles, tenemos tres tipos de estructuras de instrucciones, las cuales se pueden anidar. El primero y más sencillo es el LOOP. Éste se repetirá hasta que encuentre una instrucción que le obligue a finalizar, con instrucciones como las que veremos al final del artículo. Su sintaxis es la siguiente:
LOOP
<sentencias>
END LOOP;
Otra estructura que podemos usar es el WHILE (mientras). Al principio del bloque se evaluará una condición y si esta se cumple, se ejecutarán las instrucciones contenidas en el bloque. Cuando se ejecuten todas, volverá al inicio del bloque, volverá a evaluar la condición que le hemos puesto y si es cierta, volverá a ejecutar el código. Este proceso se repetirá hasta que la condición se evalúe a falsa. Su sintaxis es la siguiente:
WHILE <condicion> LOOP
<sentencias>
END LOOP;
Por último tenemos el FOR, con el cual podemos hacer que las instrucciones incluidas en el bloque se repitan un número determinado de veces. Suele ser la más usada para crear bucles en sql. Su sintaxis es la siguiente:
FOR <variable> IN [REVERSE] min..max
LOOP
<sentencias>
END LOOP;
La variable no hace falta declararla antes y sirve como contador. min es el valor desde el cual empieza, y que se irá incrementando (o decrementando si ponemos REVERSE) hasta llegar al valor max, por lo que las instrucciones se ejecutarán max – min veces.
En PL/SQL no se puede dejar un bucle o un IF sin instrucciones, por lo que si queremos que entre en bucle pero no ejecute ninguna instrucción, deberemos de poner la sentencia NULL;.
Si queremos interrumpir la ejecución de un bucle lo podremos hacer usando la instrucción EXIT. Si simplemente ponemos EXIT, saldrá del bucle siempre, pero podemos especificar una condición para salir del bucle en cualquier punto de la siguiente forma:
EXIT WHEN <condicion>;
De esta forma, cuando la condicion sea verdadera, saldrá del bucle.
Otra opción podría ser el uso de GOTO, pero esta no está recomendada ya que decrementa la legibilidad del programa. Su uso es sencillo, se trata de poner un etiqueta de esta forma: <<etiqueta>> en el destino del salto y usar la instrucción GOTO <<etiqueta>> donde queramos que se produzca el salto. Así podemos alterar el orden de ejecución sql.
Para las condiciones podemos usar los siguiente operadores: =, >, <, =>, =<, != (distinto), <> (distinto), is null (es nulo), is not null (no es nulo).