creación de estructuras de controlcondicionales y estructuras de control de bucles. • sentencias...

25
Copyright Oracle Corporation, 1998. All rights reserved. 6 6 Creación de Estructuras de Control Creación de Estructuras de Control

Upload: others

Post on 13-Oct-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Creación de Estructuras de Controlcondicionales y estructuras de control de bucles. • Sentencias IF condicionales: – IF-THEN – IF-THEN-ELSE – IF-THEN-ELSIF Puede modificar

Copyright Oracle Corporation, 1998. All rights reserved.

66

Creación de Estructuras de Control

Creación de Estructuras de Control

Page 2: Creación de Estructuras de Controlcondicionales y estructuras de control de bucles. • Sentencias IF condicionales: – IF-THEN – IF-THEN-ELSE – IF-THEN-ELSIF Puede modificar

6-2 Copyright Oracle Corporation, 1998. All rights reserved.

ObjetivosObjetivos

Al final de esta lección será capaz de:

• Identificar los usos y tipos de las estructuras de control

• Generar una sentencia IF

• Generar e identificar distintas sentencias de bucle

• Utilizar tablas lógicas

• Controlar el flujo de bloques utilizando etiquetas y bucles anidados

Al final de esta lecciAl final de esta lecci óón sern ser áá capaz de:capaz de:

• Identificar los usos y tipos de las estructuras de control

• Generar una sentencia IF

• Generar e identificar distintas sentencias de bucle

• Utilizar tablas lógicas

• Controlar el flujo de bloques utilizando etiquetas y bucles anidados

Page 3: Creación de Estructuras de Controlcondicionales y estructuras de control de bucles. • Sentencias IF condicionales: – IF-THEN – IF-THEN-ELSE – IF-THEN-ELSIF Puede modificar

6-3 Copyright Oracle Corporation, 1998. All rights reserved.

Control del Flujo de Ejecución PL/SQL

Control del Flujo de Ejecución PL/SQL

Puede modificar el flujo lógico de sentencias utilizando sentencias IF condicionales y estructuras de control de bucles.

• Sentencias IF condicionales:

– IF-THEN

– IF-THEN-ELSE

– IF-THEN-ELSIF

Puede modificar el flujo lPuede modificar el flujo l óógico de gico de sentencias utilizando sentencias IF sentencias utilizando sentencias IF condicionales y estructuras de control de condicionales y estructuras de control de bucles. bucles.

• Sentencias IF condicionales:

– IF-THEN

– IF-THEN-ELSE

– IF-THEN-ELSIF

Page 4: Creación de Estructuras de Controlcondicionales y estructuras de control de bucles. • Sentencias IF condicionales: – IF-THEN – IF-THEN-ELSE – IF-THEN-ELSIF Puede modificar

6-4 Copyright Oracle Corporation, 1998. All rights reserved.

Sentencias IFSentencias IF

IF condition THENstatements;

[ELSIF condition THEN statements;]

[ELSE statements;]

END IF;

IF condition THENstatements;

[ELSIF condition THEN statements;]

[ELSE statements;]

END IF;

Sintaxis

Sentencia IF Simple:

Establezca el ID del gestor en 22 si el ombre del empleado es Osborne.

SintaxisSintaxis

Sentencia IF Simple:Sentencia IF Simple:

Establezca el ID del gestor en 22 si el Establezca el ID del gestor en 22 si el ombre del empleado es Osborne. ombre del empleado es Osborne. IF v_ename = ' OSBORNE' THEN

v_mgr := 22;END IF;

IF v_ename = ' OSBORNE' THEN v_mgr := 22;

END IF;

Page 5: Creación de Estructuras de Controlcondicionales y estructuras de control de bucles. • Sentencias IF condicionales: – IF-THEN – IF-THEN-ELSE – IF-THEN-ELSIF Puede modificar

6-5 Copyright Oracle Corporation, 1998. All rights reserved.

Sentencias IF SimplesSentencias IF Simples

Establezca el título de empleo en Vendedor, el n úmero de departamento en 35 y la comisión en el 20% del salario actual si el apellido es Miller.

Ejemplo

Establezca el tEstablezca el t íítulo de empleo en tulo de empleo en Vendedor, el nVendedor, el n úúmero de departamento en mero de departamento en 35 y la comisi35 y la comisi óón en el 20% del salario n en el 20% del salario actual si el apellido es Miller.actual si el apellido es Miller.

EjemploEjemplo

. . .IF v_ename = 'MILLER' THEN

v_job := 'SALESMAN'; v_deptno := 35;v_new_comm := sal * 0.20;

END IF;. . .

. . .IF v_ename = 'MILLER' THEN

v_job := 'SALESMAN'; v_deptno := 35;v_new_comm := sal * 0.20;

END IF;. . .

Page 6: Creación de Estructuras de Controlcondicionales y estructuras de control de bucles. • Sentencias IF condicionales: – IF-THEN – IF-THEN-ELSE – IF-THEN-ELSIF Puede modificar

6-6 Copyright Oracle Corporation, 1998. All rights reserved.

Flujo de Ejecución de la Sentencia IF -THEN-ELSEFlujo de Ejecución de la Sentencia IF -THEN-ELSE

Acciones ELSE(incluyendo otros IFs)

Acciones ELSEAcciones ELSE(incluyendo otros IFs)(incluyendo otros IFs)

FALSEFALSE

Acciones THEN(incluyendo otros IFs)

Acciones THENAcciones THEN(incluyendo otros IFs)(incluyendo otros IFs)

CondiciCondici óón IFn IFTRUETRUE

Page 7: Creación de Estructuras de Controlcondicionales y estructuras de control de bucles. • Sentencias IF condicionales: – IF-THEN – IF-THEN-ELSE – IF-THEN-ELSIF Puede modificar

6-7 Copyright Oracle Corporation, 1998. All rights reserved.

Sentencias IF -THEN-ELSESentencias IF -THEN-ELSE

Establezca un indicador para los pedidos en los que hay menos de 5 d ías entre la fecha de pedido y la fecha de envío.

Ejemplo

Establezca un indicador para los pedidos Establezca un indicador para los pedidos en los que hay menos de 5 den los que hay menos de 5 d íías entre la as entre la fecha de pedido y la fecha de envfecha de pedido y la fecha de env íío. o.

EjemploEjemplo

...IF v_shipdate - v_orderdate < 5 THEN

v_ship_flag := 'Acceptable';ELSE

v_ship_flag := 'Unacceptable';END IF;...

...IF v_shipdate - v_orderdate < 5 THEN

v_ship_flag := 'Acceptable';ELSE

v_ship_flag := 'Unacceptable';END IF;...

Page 8: Creación de Estructuras de Controlcondicionales y estructuras de control de bucles. • Sentencias IF condicionales: – IF-THEN – IF-THEN-ELSE – IF-THEN-ELSIF Puede modificar

6-8 Copyright Oracle Corporation, 1998. All rights reserved.

Sentencias IF -THEN-ELSIFSentencias IF -THEN-ELSIF

Para un valor introducido concreto, devuelva un valor calculado.

Ejemplo

Para un valor introducido concreto, Para un valor introducido concreto, devuelva un valor calculado.devuelva un valor calculado.

EjemploEjemplo

. . .IF v_start > 100 THEN

RETURN (2 * v_start);ELSIF v_start >= 50 THEN

RETURN (.5 * v_start);ELSE

RETURN (.1 * v_start);END IF;. . .

. . .IF v_start > 100 THEN

RETURN (2 * v_start);ELSIF v_start >= 50 THEN

RETURN (.5 * v_start);ELSE

RETURN (.1 * v_start);END IF;. . .

Page 9: Creación de Estructuras de Controlcondicionales y estructuras de control de bucles. • Sentencias IF condicionales: – IF-THEN – IF-THEN-ELSE – IF-THEN-ELSIF Puede modificar

6-9 Copyright Oracle Corporation, 1998. All rights reserved.

Flujo de Ejecución de la Sentencia IF -THEN-ELSIFFlujo de Ejecución de la

Sentencia IF -THEN-ELSIF

FALSEFALSE

Condición ELSIF

CondiciCondici óón n ELSIFELSIF

Acciones THENAcciones THENAcciones THEN

TRUETRUE

Acciones ELSE

Acciones Acciones ELSEELSE

FALSEFALSEAcciones THENAcciones THENAcciones THEN

Condición IFCondiciCondici óón IFn IFTRUETRUE

Page 10: Creación de Estructuras de Controlcondicionales y estructuras de control de bucles. • Sentencias IF condicionales: – IF-THEN – IF-THEN-ELSE – IF-THEN-ELSIF Puede modificar

6-10 Copyright Oracle Corporation, 1998. All rights reserved.

Generación de Condiciones Lógicas

Generación de Condiciones Lógicas

• Puede manejar los valores nulos con el operador IS NULL.

• Las expresiones que contienen un valor nulo resultan en NULL.

• Las expresiones concatenadas con valores nulos tranta los valores nulos como a una cadena vacía.

• Puede manejar los valores nulos con el operador IS NULL.

• Las expresiones que contienen un valor nulo resultan en NULL.

• Las expresiones concatenadas con valores nulos tranta los valores nulos como a una cadena vacía.

Page 11: Creación de Estructuras de Controlcondicionales y estructuras de control de bucles. • Sentencias IF condicionales: – IF-THEN – IF-THEN-ELSE – IF-THEN-ELSIF Puede modificar

6-11 Copyright Oracle Corporation, 1998. All rights reserved.

Tablas L ógicasTablas L ógicas

Genere una simple condición booleana con un operador de comparación. Genere una simple condiciGenere una simple condici óón booleana n booleana con un operador de comparacicon un operador de comparaci óón. n.

NOT

TRUE

FALSE

NULL

OR

TRUE

FALSE

NULL

TRUE FALSE NULL

FALSE

TRUE

NULL

AND

TRUE

FALSE

NULL

TRUE FALSE NULL

TRUE

NULL NULL

NULL

FALSE FALSE

FALSE

FALSE

FALSE

TRUE

TRUE

TRUE

TRUETRUE

FALSE

NULL NULL

NULL

Page 12: Creación de Estructuras de Controlcondicionales y estructuras de control de bucles. • Sentencias IF condicionales: – IF-THEN – IF-THEN-ELSE – IF-THEN-ELSIF Puede modificar

6-12 Copyright Oracle Corporation, 1998. All rights reserved.

Condiciones BooleanasCondiciones Booleanas

¿Cuál es el valor de V_FLAG en cada caso?¿¿CuCuáál es el valor de V_FLAG en cada l es el valor de V_FLAG en cada caso?caso?

V_REORDER_FLAG V_AVAILABLE_FLAG V_FLAG

TRUE TRUE

TRUE FALSE

NULL TRUE

NULL FALSE

v_flag := v_reorder_flag AND v_available_flag; v_flag := v_reorder_flag AND v_available_flag;

TRUETRUE

FALSEFALSE

NULLNULL

FALSEFALSE

Page 13: Creación de Estructuras de Controlcondicionales y estructuras de control de bucles. • Sentencias IF condicionales: – IF-THEN – IF-THEN-ELSE – IF-THEN-ELSIF Puede modificar

6-13 Copyright Oracle Corporation, 1998. All rights reserved.

Control iterativo: Sentencias LOOP

Control iterativo: Sentencias LOOP

• Los bucles repiten una sentencia o una secuencia de sentencias varias veces.

• Hay tres tipos de bucles:

– Bucle b ásico

– Bucle FOR

– Bucle WHILE

• Los bucles repiten una sentencia o una secuencia de sentencias varias veces.

• Hay tres tipos de bucles:

– Bucle b ásico

– Bucle FOR

– Bucle WHILE

Page 14: Creación de Estructuras de Controlcondicionales y estructuras de control de bucles. • Sentencias IF condicionales: – IF-THEN – IF-THEN-ELSE – IF-THEN-ELSIF Puede modificar

6-14 Copyright Oracle Corporation, 1998. All rights reserved.

Bucle B ásico Bucle B ásico

SintaxisSintaxisSintaxis

LOOP statement1;. . .EXIT [WHEN condition];

END LOOP;

LOOP statement1;. . .EXIT [WHEN condition];

END LOOP;

donde: condition es una expresión o variablebooleana (TRUE, FALSE,oNULL);

donde: condition es una expresión o variablebooleana (TRUE, FALSE,oNULL);

---- delimiterdelimiter

---- statementsstatements

---- EXIT statementEXIT statement

---- delimiterdelimiter

Page 15: Creación de Estructuras de Controlcondicionales y estructuras de control de bucles. • Sentencias IF condicionales: – IF-THEN – IF-THEN-ELSE – IF-THEN-ELSIF Puede modificar

6-15 Copyright Oracle Corporation, 1998. All rights reserved.

Bucle B ásicoBucle B ásico

. . .v_ordid item.ordid%TYPE := 101;v_counter NUMBER(2) := 1;

BEGIN. . .

LOOPINSERT INTO item(ordid, itemid)

VALUES(v_ordid, v_counter);v_counter := v_counter + 1;EXIT WHEN v_counter > 10;

END LOOP;. . .

. . .v_ordid item.ordid%TYPE := 101;v_counter NUMBER(2) := 1;

BEGIN. . .

LOOPINSERT INTO item(ordid, itemid)

VALUES(v_ordid, v_counter);v_counter := v_counter + 1;EXIT WHEN v_counter > 10;

END LOOP;. . .

EjemploEjemploEjemplo

Page 16: Creación de Estructuras de Controlcondicionales y estructuras de control de bucles. • Sentencias IF condicionales: – IF-THEN – IF-THEN-ELSE – IF-THEN-ELSIF Puede modificar

6-16 Copyright Oracle Corporation, 1998. All rights reserved.

Bucle FORBucle FORSintaxis

• Utilice un bucle FOR para reducir el número de repeticiones.

• No declare el índice; se declara implícitamente.

SintaxisSintaxis

• Utilice un bucle FOR para reducir el número de repeticiones.

• No declare el índice; se declara implícitamente.

FOR index in [REVERSE] lower_bound..upper_bound LOOP

statement1;statement2;. . .

END LOOP;

FOR index in [REVERSE] lower_bound..upper_bound LOOP

statement1;statement2;. . .

END LOOP;

Page 17: Creación de Estructuras de Controlcondicionales y estructuras de control de bucles. • Sentencias IF condicionales: – IF-THEN – IF-THEN-ELSE – IF-THEN-ELSIF Puede modificar

6-17 Copyright Oracle Corporation, 1998. All rights reserved.

Bucle FORBucle FORDirectrices

• Haga referencia únicamente al índice que está dentro del bucle; fuera del bucle no está definido.

• Utilice una expresión para hacer referencia al valor existente de un índice.

• No haga referencia al índice como objetivo de una asignación.

DirectricesDirectrices

• Haga referencia únicamente al índice que está dentro del bucle; fuera del bucle no está definido.

• Utilice una expresión para hacer referencia al valor existente de un índice.

• No haga referencia al índice como objetivo de una asignación.

Page 18: Creación de Estructuras de Controlcondicionales y estructuras de control de bucles. • Sentencias IF condicionales: – IF-THEN – IF-THEN-ELSE – IF-THEN-ELSIF Puede modificar

6-18 Copyright Oracle Corporation, 1998. All rights reserved.

Bucle FORBucle FORInserte los 10 primeros artículos nuevos de líena del pedido n úmero 101.

Ejemplo

Inserte los 10 primeros artInserte los 10 primeros art íículos nuevos de culos nuevos de ll ííena del pedido nena del pedido n úúmero 101. mero 101.

EjemploEjemplo

. . .v_ordid item.ordid%TYPE := 101;

BEGIN. . .

FOR i IN 1..10 LOOPINSERT INTO item(ordid, itemid)

VALUES(v_ordid, i);END LOOP;

. . .

. . .v_ordid item.ordid%TYPE := 101;

BEGIN. . .

FOR i IN 1..10 LOOPINSERT INTO item(ordid, itemid)

VALUES(v_ordid, i);END LOOP;

. . .

Page 19: Creación de Estructuras de Controlcondicionales y estructuras de control de bucles. • Sentencias IF condicionales: – IF-THEN – IF-THEN-ELSE – IF-THEN-ELSIF Puede modificar

6-19 Copyright Oracle Corporation, 1998. All rights reserved.

Bucle WHILEBucle WHILE

Sintaxis

Utilice el bucle WHILE para repetir sentencias mientras haya una condición TRUE

SintaxisSintaxis

Utilice el bucle WHILE para repetir Utilice el bucle WHILE para repetir sentencias mientras haya una condicisentencias mientras haya una condici óón n TRUETRUE

WHILE condition LOOPstatement1;statement2;. . .

END LOOP;

WHILE condition LOOPstatement1;statement2;. . .

END LOOP;

Condition isCondition isevaluated at the evaluated at the beginning ofbeginning ofeach iteration.each iteration.

Page 20: Creación de Estructuras de Controlcondicionales y estructuras de control de bucles. • Sentencias IF condicionales: – IF-THEN – IF-THEN-ELSE – IF-THEN-ELSIF Puede modificar

6-20 Copyright Oracle Corporation, 1998. All rights reserved.

Loop WHILELoop WHILEEjemploEjemploEjemplo

ACCEPT p_price PROMPT ‘Enter the price of the item: ‘ACCEPT p_itemtot PROMPT ‘Enter the maximum total fo r

purchase of item: ‘DECLARE...v_qty NUMBER(8) := 1;v_running_total NUMBER(7,2) := 0;BEGIN

...WHILE v_running_total < &p_itemtot LOOP

...v_qty := v_qty + 1;v_running_total := v_qty * p_price;END LOOP;

...

ACCEPT p_price PROMPT ‘Enter the price of the item: ‘ACCEPT p_itemtot PROMPT ‘Enter the maximum total fo r

purchase of item: ‘DECLARE...v_qty NUMBER(8) := 1;v_running_total NUMBER(7,2) := 0;BEGIN

...WHILE v_running_total < &p_itemtot LOOP

...v_qty := v_qty + 1;v_running_total := v_qty * p_price;END LOOP;

...

Page 21: Creación de Estructuras de Controlcondicionales y estructuras de control de bucles. • Sentencias IF condicionales: – IF-THEN – IF-THEN-ELSE – IF-THEN-ELSIF Puede modificar

6-21 Copyright Oracle Corporation, 1998. All rights reserved.

Etiquetas y Loops AnidadosEtiquetas y Loops Anidados

• Anide bucles a varios niveles.

• Utilice etiquetas para distinguir entre los bloques y los bucles.

• Salga del bucle externo con la sentencia EXIT que hace referencia a la etiqueta.

• Anide bucles a varios niveles.

• Utilice etiquetas para distinguir entre los bloques y los bucles.

• Salga del bucle externo con la sentencia EXIT que hace referencia a la etiqueta.

Page 22: Creación de Estructuras de Controlcondicionales y estructuras de control de bucles. • Sentencias IF condicionales: – IF-THEN – IF-THEN-ELSE – IF-THEN-ELSIF Puede modificar

6-22 Copyright Oracle Corporation, 1998. All rights reserved.

Etiquetas y Loops AnidadosEtiquetas y Loops Anidados

...BEGIN

<<Outer_loop>>LOOP

v_counter :=v_counter+1;EXIT WHEN v_counter>10;

<<Inner_loop>>LOOP

...EXIT Outer_loop WHEN total_done = ' YES' ;-- Leave both loopsEXIT WHEN inner_done = ' YES' ;-- Leave inner loop only...

END LOOP Inner_loop;...

END LOOP Outer_loop;END;

...BEGIN

<<Outer_loop>>LOOP

v_counter :=v_counter+1;EXIT WHEN v_counter>10;

<<Inner_loop>>LOOP

...EXIT Outer_loop WHEN total_done = ' YES' ;-- Leave both loopsEXIT WHEN inner_ done = ' YES' ;-- Leave inner loop only...

END LOOP Inner_loop ;...

END LOOP Outer_loop ;END;

Page 23: Creación de Estructuras de Controlcondicionales y estructuras de control de bucles. • Sentencias IF condicionales: – IF-THEN – IF-THEN-ELSE – IF-THEN-ELSIF Puede modificar

6-23 Copyright Oracle Corporation, 1998. All rights reserved.

Cambie el flujo lógico de sentencia utilizando estructuras de control.

• Condicional (sentencia IF)

– IF THEN

– IF-THEN-ELSE

– IF-THEN-ELSIF

Cambie el flujo lCambie el flujo l óógico de sentencia gico de sentencia utilizando estructuras de control. utilizando estructuras de control.

• Condicional (sentencia IF)

– IF THEN

– IF-THEN-ELSE

– IF-THEN-ELSIF

ResumenResumen

Page 24: Creación de Estructuras de Controlcondicionales y estructuras de control de bucles. • Sentencias IF condicionales: – IF-THEN – IF-THEN-ELSE – IF-THEN-ELSIF Puede modificar

6-24 Copyright Oracle Corporation, 1998. All rights reserved.

• Loops

– Loop b ásico

– Loop FOR

– Loop WHILE

– Sentencia EXIT

• Loops

– Loop b ásico

– Loop FOR

– Loop WHILE

– Sentencia EXIT

ResumenResumen

Page 25: Creación de Estructuras de Controlcondicionales y estructuras de control de bucles. • Sentencias IF condicionales: – IF-THEN – IF-THEN-ELSE – IF-THEN-ELSIF Puede modificar

6-25 Copyright Oracle Corporation, 1998. All rights reserved.

Visión General de la PrácticaVisión General de la Práctica

• Ejecución de acciones condicionales utilizando la sentencia IF

• Ejecución de iteraciones utilizando la estructura bucle

• Ejecución de acciones condicionales utilizando la sentencia IF

• Ejecución de iteraciones utilizando la estructura bucle