2. Estructuras de Control Se puede cambiar el flujo lógico de declaraciones dentro del bloque de PL-SQL con un número de estructuras del control. Existen dos tipos de estructuras del control en PL-SQL: o Constructores condicionales (IF) o Estructuras de control (LOOP) Existen tres formas de declarar constructores condicionales: o IF – THEN – END – IF o IF – THEN – ELSE – END – IF o IF – THEN – ELSEIF – END – IF
3. Condicionales Cláusula IF La estructura para la cláusula IF en PL-SQL es similar a la estructura de una cláusula IF en otro lenguaje procedural. Esta cláusula permite que PL-SQL realice las acciones selectivas basadas en condiciones.
4. Sintaxis Sintaxis: Condición: es una variable o una expresión booleana (TRUE, FALSE, o NULL) (se asocia a una secuencia de declaraciones, se ejecuta solamente sí la expresión es TRUE) THEN: es una cláusula que asocia la expresión booleana que la precede con la secuencia de declaraciones que la sigue. Declaraciones: puede ser la declaración de una o más declaraciones de PL-SQL o SQL. ELSIF: es una palabra clave que introduce una expresión booleana (si la primera condición es FALSE o NULL entonces la palabra clave de ELSIF introduce condiciones adicionales.) ELSE: es una palabra clave se ejecuta si el control la alcanza, y realiza la secuencia de declaraciones que la siguen
5. Ejemplo Cláusula IF simple ... IF v_ename = ‘MILLER’ THEN v_job := ‘SALESMAN’ v_deptno := 35; v_new_comm := sal * 0.20; END IF; ... En el ejemplo PL-SQL realiza 3 acciones solo si la condición es TRUE. Si la condición es FALSE o NULL, PL-SQL no hace caso de ellas. Se pueden realizar acciones basadas en condiciones que son satisfechas.
6. ELSIF Al escribir el código, hay que recordar el deletreo de las palabras claves: ELSIF es una palabra. END IF son dos palabras. Si la condición booleana que controla es TRUE, la secuencia asociada de declaraciones se ejecuta; si la condición booleana que controla es FALSE o NULL, la secuencia asociada de declaraciones no se ejecuta. Se permite cualquier número de cláusulas ELSIF. Puede haber una cláusula ELSE. Cláusula IF – THEN – ELSE Si la condición es FALSA o NULL, se puede usar la cláusula ELSE para realizar otras acciones.
7. ELSIF Cláusula IF – THEN – ELSE ... IF condicion1 THEN declaracion1; ELSIF condicion2 THEN declaración2; ELSEIF declaración3; END IF; ... Cualquier acción para el resultado de la primera declaración IF puede incluir mas declaraciones IF antes de realizar acciones específicas. Las cláusulas THEN y ELSE pueden incluir declaraciones IF. Cada declaración de un IF debe terminar con un END IF. Cláusula IF – THEN – ELSIF Es posible utilizar la cláusula ELSIF en vez de declarar un IF. El código es más fácil de leer y de entender, y la lógica se identifica claramente. Si la acción en la cláusula ELSE consiste puramente por otra declaración IF, es más conveniente utilizar la cláusula ELSIF.
8. CICLOS Control Iterativo: Estatutos LOOP PL-SQL proporcionan un número de facilidades para estructurar ciclos que permitan repetir una declaración o una secuencia para múltiples tiempos. Las construcciones de colocación son el segundo tipo de estructura del control: LOOP básico para proporcionar acciones repetitivas sin condiciones FOR ciclos para proporcionar el control iterativo de las acciones basadas en un contador WHILE ciclos para proporcionar el control iterativo de las acciones basadas en una condición EXIT para terminar ciclos
9. LOOP SIMPLE LOOP básico La forma más simple es la declaración de un LOOP básico, que incluye una secuencia de declaraciones entre las palabras claves LOOP y END LOOP. El flujo de la ejecución se termina cuando llega a una declaración END LOOP, y regresa el control a la declaración correspondiente que se refiera a este LOOP. Un loop básico permite que este sea ejecutado por lo menos una vez. Sin la declaración de EXIT, el loop sería infinito.
10. CICLOS La declaración EXIT Se puede terminar un loop usando la declaración EXIT. El control pasa a la siguiente declaración después de la declaración END LOOP. Se puede publicar EXIT como cualquier otra acción dentro de una declaración IF o como declaración independiente dentro del loop. La declaración EXIT se debe poner dentro de un loop. En el último caso, se puede unir una cláusula WHEN para permitir la terminación condicional del loop. Cuando la declaración EXIT es encontrada, la condición en la cláusula WHEN es evaluada. Si la condición es TRUE, el loop se termina y pasa el control a la siguiente declaración después del loop. Un loop básico puede contener múltiples declaraciones EXIT.
12. FOR LOOP FOR LOOP FOR este loop tienen la misma estructura general que el loop básico. Además, tienen un orden de control antes de la palabra clave del ciclo para determinar el número de iteraciones que debe realizar en PL-SQL.
14. SINTAXIS Sintaxis: contador: es un número entero implícito declarado que se incrementa o decrementa automáticamente (decrementa si se utiliza la palabra clave REVERSE) por 1 en cada iteración del loop hasta el límite superior o inferior que se indique. REVERSE: causa opuestamente al decremento por cada iteración del límite superior o inferior. limite_inferior: especifica el límite inferior para el rango de valores del contador limite _superior: especifica el límite superior para la el rango valores del contador
15. WHILE LOOP WHILE LOOP Se puede usar el WHILE loop para repetir una declaración hasta que la condición es TRUE. La condición se evalúa en el comienzo de cada iteración. El loop termina cuando la condición es FALSE. Si la condición es FALSE en el comienzo del loop, entonces no se realiza ninguna otra iteración.
17. WHILE LOOP Sintaxis: condicion: es una variable o una expresión booleana (TRUE, FALSE, o NULL). declaracion: puede ser uno o más declaraciones PL-SQL o SQL. Si las variables implicadas en las condiciones no cambian durante el cuerpo del loop, entonces la condición siguen siendo TRUE y el loop no termina. Si la condición es NULL, el loop sobrepasado y pasa el control a la siguiente declaración.
18. Ejemplos Escriba un script con el siguiente ejemplo: Declare v_c Binary_integer:=1: BEGIN While v_c <=50 LOOP INSERT INTO TEMPORAL VALUES(v_c, 'Indice del bucle'); v_c:=v_c+1; END LOOP; END; / Describa que hace el script.