98 - Control de flujo (if)


Primer problema:

Un negocio almacena los datos de sus productos en una tabla denominada "productos". Dicha tabla contiene el código de producto, el precio, el stock mínimo que se necesita (cantidad mínima requerida antes de comprar más) y el stock actual (cantidad disponible en depósito). Si el stock actual es cero, es urgente reponer tal producto; menor al stock mínimo requerido, es necesario reponer tal producto; si el stock actual es igual o supera el stock minimo, está en estado normal.

1- Elimine la tabla "productos":

 drop table productos;

2- Cree la tabla con la siguiente estructura:

 create table productos(
  codigo number(5),
  precio number(6,2),
  stockminimo number(4),
  stockactual number(4)
 );

3- Ingrese algunos registros:

 insert into productos values(100,10,100,200);
 insert into productos values(102,15,200,500);
 insert into productos values(130,8,100,0);
 insert into productos values(240,23,100,20);
 insert into productos values(356,12,100,250);
 insert into productos values(360,7,100,100);
 insert into productos values(400,18,150,100);

4- Cree una función que reciba dos valores numéricos correspondientes a ambos stosks. Debe comparar ambos stocks y retornar una cadena de caracteres indicando el estado de cada producto, si stock actual es:

 - cero: "faltante",
 - menor al stock mínimo: "reponer",
 - igual o superior al stock mínimo: "normal".

5- Realice un "select" mostrando el código del producto, ambos stocks y, empleando la función creada anteriormente, una columna que muestre el estado del producto

6- Realice la misma función que en el punto 4, pero esta vez empleando en la estructura condicional la sintaxis "if... elsif...end if"

7- Realice un "select" mostrando el código del producto, ambos stocks y, empleando la función creada anteriormente, una columna que muestre el estado del producto

8- Realice una función similar a las anteriores, pero esta vez, si el estado es "reponer" o "faltante", debe especificar la cantidad necesaria (valor necesario para llegar al stock mínimo)

7- Realice un "select" mostrando el código del producto, ambos stocks y, empleando la función creada anteriormente, una columna que muestre el estado del producto

Ver solución

 drop table productos;

 create table productos(
  codigo number(5),
  precio number(6,2),
  stockminimo number(4),
  stockactual number(4)
 );

 insert into productos values(100,10,100,200);
 insert into productos values(102,15,200,500);
 insert into productos values(130,8,100,0);
 insert into productos values(240,23,100,20);
 insert into productos values(356,12,100,250);
 insert into productos values(360,7,100,100);
 insert into productos values(400,18,150,100);

create or replace function f_estado(aactual number,aminimo number)
  return varchar2
 is
  estado varchar2(20);
 begin
  estado:='normal';
   if aactual>=aminimo then
    estado:='normal';
   else
    if aactual=0 then estado:='faltante';
    else
      estado:='reponer';
    end if;
   end if;
   return estado;
 end;
 /

 select codigo, stockactual, stockminimo, f_estado(stockactual,stockminimo) as estado from productos;

 create or replace function f_estado(aactual number,aminimo number)
  return varchar2
 is
  estado varchar2(20);
 begin
  estado:='normal';
   if aactual>=aminimo then
    estado:='normal';
   elsif
    aactual=0 then estado:='faltante';
   else
      estado:='reponer';
   end if;
   return estado;
 end;
 /

 select codigo, stockactual, stockminimo, f_estado(stockactual,stockminimo) as estado from productos;

 create or replace function f_estado(aactual number,aminimo number)
  return varchar2
 is
  estado varchar2(20);
 begin
  estado:='normal';
   if aactual>=aminimo then
    estado:='normal';
   elsif
    aactual=0 then estado:='faltante '||to_char(aminimo);
   else
      estado:='reponer '||to_char(aminimo-aactual);
   end if;
   return estado;
 end;
 /

 select codigo, stockactual, stockminimo, f_estado(stockactual,stockminimo) as estado from productos;

 

Segundo problema:

Una clínica almacena la información de sus pacientes en una tabla denominada "pacientes".

1- Elimine la tabla y créela con la siguiente estructura:

 drop table pacientes;

 create table pacientes(
  documento char(8),
  nombre varchar2(30),
  edad number(2),
  sexo char(1)
 );

2- Ingrese los siguientes registros:

 insert into pacientes values('11111111','Acosta Ana',40,'f');
 insert into pacientes values('22222222','Bustos Betina',35,'f');
 insert into pacientes values('33333333','Caseres Carlos',18,'m');
 insert into pacientes values('44444444','Dominguez Diego',6,'m');
 insert into pacientes values('15555555','Fuentes Fabiana',55,'f');
 insert into pacientes values('26666666','Gomez Gaston',38,'m');
 insert into pacientes values('37777777','Irala Ines',16,'f');
 insert into pacientes values('38888888','Juarez Julieta',17,'f');
 insert into pacientes values('40000000','Lopez Lucas',3,'m');

3- Realice una función que reciba la edad del paciente y retorne la cadena "menor" o "mayor" según sea menor a 18 años o no

4- Realice una función que reciba el caracter correspondiente al sexo del paciente y retorne la cadena "femenino" o "masculino"

5- Realice un "select" mostrando el nombre del paciente y empleando las funciones de los puntos 3 y 4, dos columnas que indiquen si es mayor o menor de edad y el sexo.


Ver solución
 drop table pacientes;

 create table pacientes(
  documento char(8),
  nombre varchar2(30),
  edad number(2),
  sexo char(1)
 );

 insert into pacientes values('11111111','Acosta Ana',40,'f');
 insert into pacientes values('22222222','Bustos Betina',35,'f');
 insert into pacientes values('33333333','Caseres Carlos',18,'m');
 insert into pacientes values('44444444','Dominguez Diego',6,'m');
 insert into pacientes values('15555555','Fuentes Fabiana',55,'f');
 insert into pacientes values('26666666','Gomez Gaston',38,'m');
 insert into pacientes values('37777777','Irala Ines',16,'f');
 insert into pacientes values('38888888','Juarez Julieta',17,'f');
 insert into pacientes values('40000000','Lopez Lucas',3,'m');

create or replace function f_menormayor(aedad number)
  return varchar2
 is
  resultado varchar2(10);
 begin
   resultado:='menor';
   if aedad<18 then
    resultado:='menor';
   else resultado:='mayor';
   end if;
   return resultado;
 end;
 /

create or replace function f_sexo(asexo char)
 return varchar2
 is
  resultado varchar2(12);
 begin
   resultado:='femenino';
   if asexo='m' then
    resultado:='masculino';
   else resultado:='femenino';
   end if;
   return resultado;
 end;
 /

 select nombre, edad,f_menormayor(edad) as categoria, f_sexo(sexo) as sexo from pacientes;

Retornar