control

18

Click here to load reader

Upload: mauricio-bedoya

Post on 06-Jul-2015

480 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Control

PL/SQLSesión 2

Estructuras de Control

Ing. Mauricio Bedoya

Page 2: Control

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 – IFo IF – THEN – ELSEIF – END – IF

Page 3: Control

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.

I F c o n d i c i o n T H E N d e c l a r a c i o n e s ;[ E L S E I F c o n d i c i o n T H E N d e c l a r a c i o n e s ; ][ E L S E d e c l a r a c i o n e s ; ]E N D I F

Page 4: Control

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

Page 5: Control

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.

Page 6: Control

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.

Page 7: Control

ELSIFClá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.

Page 8: Control

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 contadorWHILE ciclos para proporcionar el control iterativo de las acciones basadas en una condiciónEXIT para terminar ciclos

Page 9: Control

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.

Page 10: Control

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.

Page 11: Control

CICLOS

L O O P - - d e l i m i t a d o r d e c l a r a c i o n e s ; - - d e c l a r a c i o n e s . . . E X I T [ W H E N c o n d i c i o n ] ; - - E X I T d e c l a r a c i o nE N D L O O P - - d e l i m i t a d o r

d o n d e : c o n d i c i o n e s u n a v a r i a b l e b o o l e a n a o

e x p r e s i o n ( T R U E , F A L S E , N U L L )

Page 12: Control

FOR LOOP

FOR LOOPFOR 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.

Page 13: Control

FOR LOOP

F O R c o n t a d o r i n [ R E V E R S E ] l i m i t e _ i n f e r i o r . . l i m i t e _ s u p e r i o r L O O P d e c l a r a c i o n 1 ; d e c l a r a c i o n 2 ; . . .E N D L O O P ;

Page 14: Control

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 contadorlimite _superior: especifica el límite superior para la el rango valores del contador

Page 15: Control

WHILE LOOP

WHILE LOOPSe 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.

Page 16: Control

WHILE LOOP

W H I L E c o n d i c i o n L O O P d e c l a r a c i o n 1 ; d e c l a r a c i o n 2 ; . . .E N D L O O P ;

Page 17: Control

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.

Page 18: Control

Ejemplos

Escriba un script con el siguiente ejemplo:

Declarev_c Binary_integer:=1:BEGINWhile v_c <=50 LOOPINSERT INTO TEMPORALVALUES(v_c, 'Indice del bucle');v_c:=v_c+1;END LOOP;END;/

Describa que hace el script.