99 - Control de flujo (case)


Primer problema:

Trabajamos con la tabla "empleados".

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

 drop table empleados;

 create table empleados (
  documento char(8),
  nombre varchar(30),
  fechanacimiento date,
  hijos number(2),
  sueldo number(6,2),
  sexo char(1)  
 );

2- Ingrese algunos registros:

 insert into empleados values('20000000','Acosta Ana','10/05/1968',0,800,'f');
 insert into empleados values('21111111','Bustos Bernardo','09/07/1970',2,550,'m');
 insert into empleados values('22222222','Caseros Carlos','15/10/1971',3,500,'m');
 insert into empleados values('23333333','Fuentes Fabiana','25/08/1972',0,500,'f');
 insert into empleados values('24444444','Gomez Gaston','28/03/1979',1,850,'m');
 insert into empleados values('25555555','Juarez Javier','18/08/1981',2,600,'m');
 insert into empleados values('26666666','Lopez Luis','17/09/1978',4,690,'m');
 insert into empleados values('27777777','Morales Marta','22/08/1975',2,480,'f');
 insert into empleados values('28888888','Norberto Nores','11/08/1973',3,460,'m');
 insert into empleados values('29999999','Oscar Oviedo','19/07/1976',0,700,'m');

3- La empresa tiene por política festejar los cumpleaños de sus empleados cada mes, si es de sexo femenino se le regala un ramo de flores, sino, una lapicera. Realice un "select" mostrando el nombre del empleado, el día del cumpleaños y una columna extra que muestre "FLORES" o "LAPICERA" según el sexo del empleado (case), de todos los empleados que cumplen años en el mes de agosto (where) y ordene por día.

Ver solución

 drop table empleados;

 create table empleados (
  documento char(8),
  nombre varchar(30),
  fechanacimiento date,
  hijos number(2),
  sueldo number(6,2),
  sexo char(1)  
 );

 insert into empleados values('20000000','Acosta Ana','10/05/1968',0,800,'f');
 insert into empleados values('21111111','Bustos Bernardo','09/07/1970',2,550,'m');
 insert into empleados values('22222222','Caseros Carlos','15/10/1971',3,500,'m');
 insert into empleados values('23333333','Fuentes Fabiana','25/08/1972',0,500,'f');
 insert into empleados values('24444444','Gomez Gaston','28/03/1979',1,850,'m');
 insert into empleados values('25555555','Juarez Javier','18/08/1981',2,600,'m');
 insert into empleados values('26666666','Lopez Luis','17/09/1978',4,690,'m');
 insert into empleados values('27777777','Morales Marta','22/08/1975',2,480,'f');
 insert into empleados values('28888888','Norberto Nores','11/08/1973',3,460,'m');
 insert into empleados values('29999999','Oscar Oviedo','19/07/1976',0,700,'m');

 select nombre,extract (day from fechanacimiento) as dia,
  case sexo
   when 'f' then 'FLORES'
   else 'LAPICERA'
  end as regalo
 from empleados
 where extract(month from fechanacimiento)='08'
 order by 2;

 

Segundo problema:

Un profesor guarda los promedios de sus alumnos de un curso en una tabla llamada "alumnos".

1- Elimine la tabla.

  drop table alumnos;

2- Cree la tabla:

 create table alumnos(
  legajo char(5) not null,
  nombre varchar2(30),
  promedio number(4,2)
);

3- Ingrese los siguientes registros:

 insert into alumnos values(3456,'Perez Luis',8.5);
 insert into alumnos values(3556,'Garcia Ana',7.0);
 insert into alumnos values(3656,'Ludueña Juan',9.6);
 insert into alumnos values(2756,'Moreno Gabriela',4.8);
 insert into alumnos values(4856,'Morales Hugo',3.2);
 insert into alumnos values(7856,'Gomez Susana',6.4);

4- Si el alumno tiene un promedio menor a 4, muestre un mensaje "reprobado", si el promedio es mayor o igual a 4 y menor a 7, muestre "regular", si el promedio es mayor o igual a 7, muestre "promocionado", usando "case" (recuerde que "case" toma valores puntuales, emplee "trunc")

5- Elimine la tabla "alumnos"

6- La nueva tabla contendrá varias notas por alumno. Cree la tabla:

 create table alumnos(
  legajo char(5) not null,
  nombre varchar2(30),
  nota number(4,2)
);

7- Ingrese los siguientes registros:

 insert into alumnos values(3456,'Perez Luis',8.5);
 insert into alumnos values(3456,'Perez Luis',9.9);
 insert into alumnos values(3456,'Perez Luis',7.8);
 insert into alumnos values(3556,'Garcia Ana',7.0);
 insert into alumnos values(3556,'Garcia Ana',6.0);
 insert into alumnos values(3656,'Ludueña Juan',9.6);
 insert into alumnos values(3656,'Ludueña Juan',10);
 insert into alumnos values(2756,'Moreno Gabriela',4.2);
 insert into alumnos values(2756,'Moreno Gabriela',2.6);
 insert into alumnos values(2756,'Moreno Gabriela',2);
 insert into alumnos values(4856,'Morales Hugo',3.2);
 insert into alumnos values(4856,'Morales Hugo',4.7);
 insert into alumnos values(7856,'Gomez Susana',6.4);
 insert into alumnos values(7856,'Gomez Susana',8.6);

8- Si el alumno tiene un promedio menor a 4, muestre un mensaje "reprobado", si el promedio es mayor o igual a 4 y menor a 7, muestre "regular", si el promedio es mayor o igual a 7, muestre "promocionado", usando "case" (recuerde que "case" toma valores puntuales, emplee "trunc"). Para obtener el promedio agrupe por legajo y emplee la función "avg"

9- Cree una tabla denominada "alumnosCondicion" con los campos "legajo", "notafinal" y "condicion":

  drop table alumnosCondicion;
  create table alumnosCondicion(
   legajo char(5),
   notafinal number(4,2),
   condicion varchar2(15)
  );

10- Cree o reemplace un procedimiento almacenado llamado "pa_CargarCondicion" que guarde en la tabla "alumnosCondicion" el legajo de cada alumno, el promedio de sus notas y la condición (libre, regular o promocionado)

11- Ejecute el procedimiento "pa_cargarCondicion" y recupere todos los datos de la tabla "alumnoscondicion"


Ver solución
  drop table alumnos;

 create table alumnos(
  legajo char(5) not null,
  nombre varchar2(30),
  promedio number(4,2)
);

 insert into alumnos values(3456,'Perez Luis',8.5);
 insert into alumnos values(3556,'Garcia Ana',7.0);
 insert into alumnos values(3656,'Ludueña Juan',9.6);
 insert into alumnos values(2756,'Moreno Gabriela',4.8);
 insert into alumnos values(4856,'Morales Hugo',3.2);
 insert into alumnos values(7856,'Gomez Susana',6.4);

 select legajo,promedio,
  case trunc(promedio)
   when 0 then 'reprobado'
   when 1 then 'reprobado'
   when 2 then 'reprobado'
   when 3 then 'reprobado'
   when 4 then 'regular'
   when 5 then 'regular'
   when 6 then 'regular'
   when 7 then 'promocionado'
   when 8 then 'promocionado'
   when 9 then 'promocionado'
   else 'promocionado'
  end as Condicion
 from alumnos;

 drop table alumnos;

 create table alumnos(
  legajo char(5) not null,
  nombre varchar2(30),
  nota number(4,2)
);

 insert into alumnos values(3456,'Perez Luis',8.5);
 insert into alumnos values(3456,'Perez Luis',9.9);
 insert into alumnos values(3456,'Perez Luis',7.8);
 insert into alumnos values(3556,'Garcia Ana',7.0);
 insert into alumnos values(3556,'Garcia Ana',6.0);
 insert into alumnos values(3656,'Ludueña Juan',9.6);
 insert into alumnos values(3656,'Ludueña Juan',10);
 insert into alumnos values(2756,'Moreno Gabriela',4.2);
 insert into alumnos values(2756,'Moreno Gabriela',2.6);
 insert into alumnos values(2756,'Moreno Gabriela',2);
 insert into alumnos values(4856,'Morales Hugo',3.2);
 insert into alumnos values(4856,'Morales Hugo',4.7);
 insert into alumnos values(7856,'Gomez Susana',6.4);
 insert into alumnos values(7856,'Gomez Susana',8.6);

 select legajo,trunc(avg(nota),2),
  case trunc(avg(nota))
   when 0 then 'reprobado'
   when 1 then 'reprobado'
   when 2 then 'reprobado'
   when 3 then 'reprobado'
   when 4 then 'regular'
   when 5 then 'regular'
   when 6 then 'regular'
   when 7 then 'promocionado'
   when 8 then 'promocionado'
   when 9 then 'promocionado'
   else 'promocionado'
  end as Condicion
 from alumnos
 group by legajo;

  create table alumnosCondicion(
   legajo char(5),
   notafinal number(4,2),
   condicion varchar2(15)
  );

 create or replace procedure pa_cargarCondicion
 as
 begin
  insert into alumnoscondicion
  select legajo,avg(nota),
  case trunc(avg(nota))
   when 0 then 'libre'
   when 1 then 'libre'
   when 2 then 'libre'
   when 3 then 'libre'
   when 4 then 'regular'
   when 5 then 'regular'
   when 6 then 'regular'
   when 7 then 'promocionado'
   when 8 then 'promocionado'
   when 9 then 'promocionado'
   else 'promocionado'
  end
  from alumnos
  group by legajo;
 end;
 /

 execute pa_CargarCondicion;
 select *from alumnoscondicion;

Retornar