Académique Documents
Professionnel Documents
Culture Documents
• Selectivas/Condicionales,
• Bucles.
Estructura Selectiva IF:
Sintaxis:
IF condición THEN
Bloque de instrucciones;
ELSE
Bloque de instrucciones;
END IF;
Ejemplo 1:
Requerimiento:
Determinar si la edad promedio de los
empleados es mayor a los 40 años, si es
asi desplegar un mensaje por consola que
diga GRUPO ADULTO UNO caso contario
GRUPO ADULTO DOS.
set serveroutput on
declare
mEdad int;
begin
Select AVG((extract(year from current_date) - extract(year from fechanacimiento))) INTO mEdad
From Empleados;
if (mEdad > 40) then
dbms_output.put_line('GRUPO ADULTO UNO..'|| to_char(mEdad));
else
dbms_output.put_line('GRUPO ADULTO DOS..'|| to_char(mEdad));
end if;
end;
/
Demostración.
Realizar un reporte que me permita determinar de que cuidad es el cliente que
realizo el pedido mas alto entre los meses de Enero a Mayo del 2017, si la
ciudad es Guayaquil mostrar por consola el mensaje "CLIENTE REGION COSTA",
caso contrario "CLIENTE INDETERMINADO"
set serveroutput on
declare
mciudad Clientes.Ciudad%TYPE;
mmonto int;
begin
Select c.Ciudad, d.cantidad INTO mciudad, mmonto
From Clientes c inner join Pedidos p on c.idcliente = p.idcliente
inner join detalle_pedidos d on p.idpedido = d.idpedido
Where d.cantidad = (Select max(cantidad) From detalle_pedidos)
and p.fechapedido between '01/01/2017' and '30/05/2017’;
--dbms_output.put_line('Ciudad y Monto: '||mciudad||mmonto);
if (mciudad ='Guayaquil') then
dbms_output.put_line('CLIENTE DE LA REGION COSTA');
else
dbms_output.put_line('CLIENTE NO INDETERMINADO');
end if;
end;
Laboratorio.
Ejercicios Propuestos:
A. Determinar si la edad promedio de los Empleados de las
ciudades de Guayaquil o Babahoyo es mayor a la edad
promedio de los empleados que habitan en la región Sierra.
Muestre por consola un mensaje que indique el resultado
de dicha comparación.
Requerimiento:
Veamos ahora el mismo ejemplo
anterior pero aplicando la 2DA FORMA
del CASE, revisemos como se hace:
set serveroutput on
declare
mPrecio Productos.PrecioUnidad%TYPE;
mDescuento number(4,2);
begin
Select AVG(p.PrecioUnidad) into mPrecio
From Productos p inner join Categorias c on c.idcategorias = p.idcategorias
Where NombreCategoria = 'Carnes';
Case
when mPrecio < 100 Then mDescuento:=0.10;
when mPrecio > 100 and mPrecio < 200 Then mDescuento:=0.20;
when mPrecio > 200 and mPrecio < 300 Then mDescuento:=0.30;
else
mDescuento:=0.05;
End case;
dbms_output.put_line('El descuento es: '||to_char(mDescuento));
end;
/
Laboratorio.
Ejercicios Propuestos:
Determinar el status de los clientes de la región costa, en base
al promedio de los montos de compra en el mes de Febrero.
Mostrar un mensaje bajo el siguiente criterio:
MONTO PEDIDO STATUS
a) LOOP
b) WHILE
c) FOR
El Bucle LOOP.
El bucle LOOP, se repite tantas veces como sea necesario hasta que
se fuerza su salida con la instrucción EXIT.
Su sintaxis es la siguiente:
LOOP
Instrucciones; LOOP
IF (condición) THEN Instrucciones;
Instrucciones; EXIT WHEN (condición);
EXIT; Instrucciones;
END IF; END LOOP;
END LOOP;
SET SERVEROUTPUT ON;
DECLARE
resultado number:=0;
multiplicador number:=1;
BEGIN
LOOP
resultado := 3 * multiplicador;
DBMS_OUTPUT.PUT_LINE('3x'||TO_CHAR(multiplicador)||'='||TO_CHAR(resultado));
multiplicador := multiplicador + 1;
EXIT WHEN multiplicador > 5;
END LOOP;
END;
/
El Bucle WHILE.
El bucle WHILE, se repite mientras que se cumpla una condición
lógica. Su sintaxis es la siguiente: