1. Función que
pasándole un salario me devuelva cuantos empleados cobran menos de ese salario
mostrar también el nombre y el salario de dichos empleados.
Delimiter $$
drop function if
exists ej_cursor2$$
create function
ej_cursor2(tope float) returns int
begin
declare done int
default false;
declare salario float;
declare
numero_empleados int default 0;
declare cursor2 cursor
for select salEmp from empleados;
declare continue
handler for not found set done=TRUE;
open cursor2;
bucle:LOOP
fetch cursor2 into salario;
if
done=TRUE then
leave bucle;
end if;
if
salario<tope then
set
numero_empleados=numero_empleados+1;
end if;
end loop;
close cursor2;
return
numero_empleados;
end
$$
2.
Desarrollar un procedimiento que visualice el apellido y la fecha de alta de
todos los empleados ordenados por apellido.
Delimiter $$
Drop procedure if exists cursor01 $$
Create procedure cursor01()
begin
declare done int default false;
declare fecha_incorporacion date;
declare nombre varchar (30);
declare curs cursor for select
nomEmp,fecIncorporacion from empleados
order by nomEmp;
declare continue handler for not
found set done=true;
open curs;
bucle:loop
fetch curs into
nombre,fecha_incorporacion;
select nombre,fecha_incorporacion;
if done then
leave bucle;
end if;
end loop bucle;
close curs;
end
$$
3. Codificar
un procedimiento que muestre el nombre de cada departamento y el número de
empleados que tiene.
Delimiter $$
drop procedure if exists cursor02 $$
create procedure cursor02()
begin
declare done int default false;
declare Departamento varchar (20);
declare Numero_Empleados int;
declare curs cursor for select
d.nombreDpto,count(*) from departamentos as d
inner join empleados as e
on d. codDepto=e.codDepto
group by d.nombreDpto;
declare continue handler for not
found set done=true;
open curs;
bucle:loop
fetch curs into
Departamento,Numero_Empleados;
if done then
leave bucle;
end if;
select
Departamento,Numero_Empleados;
end loop bucle;
close curs;
end
$$
4. Escribir
un procedimiento que reciba una cadena y visualice el apellido y el número de
empleado de todos los empleados cuyo apellido contenga la cadena especificada.
Al finalizar visualizar el número de empleados mostrados.
Delimiter $$
Drop procedure if exists cursor03$$
create procedure cursor03(in cadena
varchar (30))
begin
declare done int default false;
declare Nombre_Empleado varchar
(30);
declare contador int default 0;
declare curs cursor for select
nomEmp from empleados
where lower(nomEmp) like
concat("%”, cadena,"%");
declare continue handler for not
found set done=true;
open curs;
bucle:loop
fetch curs into Nombre_Empleado;
if done then
leave bucle;
end if;
select Nombre_Empleado;
set contador=contador +1;
end loop bucle;
select contador;
close curs;
end
$$
5. Escribir
un programa que visualice el apellido y el salario de los cinco empleados que
tienen el salario más alto.
Delimiter $$
Drop procedure if exists cursor04$$
create procedure cursor04 ()
begin
declare done int default false;
declare nombre varchar (30);
declare salario float;
declare curs cursor for select
nomEmp,salEmp from empleados
order by salEmp desc
limit 5;
declare continue handler for not
found set done=true;
open curs;
bucle:loop
fetch curs into nombre,salario;
if done then
leave bucle;
end if;
select nombre,salario;
end loop bucle;
close curs;
end
$$
6. Codificar un programa que
visualice los dos empleados que ganan menos de cada oficio.
CREATE DEFINER=`root`@`localhost`
PROCEDURE `tarea4_05B`()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE nom varchar(20);
DECLARE sal FLOAT;
DECLARE ofi varchar(15);
DECLARE ofi_ant varchar(15);
DECLARE cont int default 0;
DECLARE cursor05 CURSOR FOR
Select nomemp, salemp, cargoe
From empleados ORDER BY cargoe asc,
salemp asc;
DECLARE CONTINUE HANDLER FOR NOT
FOUND SET done = TRUE;
OPEN cursor05;
Set ofi_ant="*";
Bucle: LOOP
FETCH cursor05 INTO nom,sal,ofi;
IF done=TRUE THEN
LEAVE bucle;
END IF;
If ofi_ant<>ofi then
Set ofi_ant=ofi;
Set cont=0;
Else
Set cont=cont+1;
End if;
If cont<3 then
Select nom,sal,ofi;
End if;
Set cont=cont +1;
END LOOP;
Close cursor05;
END
7. Escribir
un programa que muestre Para cada departamento: Número de empleados y suma de
los salarios del departamento. Al final del listado: Número total de empleados
y suma de todos los salarios.
delimiter $$
drop procedure if exists cursor06 $$
create procedure cursor06()
begin
declare done int default false;
declare Departamento varchar(20);
declare numero_empleados int;
declare Salario_total_departamento
float;
declare Salario_total float default
0.0;
declare Total_empleados int default
0;
declare curs cursor for select
d.nombreDpto,count(e.nDIEmp),sum(e.salEmp)
from empleados as e
inner join departamentos as d
on e.codDepto=d.codDepto
group by d.nombreDpto;
declare continue handler for not
found set done=true;
open curs;
bucle:loop
fetch curs into
Departamento,numero_empleados,Salario_total_departamento;
if done then
leave bucle;
end if;
select
Departamento,numero_empleados,Salario_total_departamento;
set
Total_empleados=Total_empleados+numero_empleados;
set Salario_total=Salario_total+Salario_total_departamento;
end loop bucle;
select Total_empleados
,Salario_total;
close curs;
end
$$
JARDINERÍA
8. Crear un procedimiento que
muestre los clientes poniendo:
- Si han hecho pagos la suma total
de los mismos.
- Si no han hecho pagos poner
"SIN PAGOS";
Al final mostrar el total de pagos
de todos los clientes.
Delimiter $$
Drop procedure if exists Jardineria06
create procedure Jardineria06()
begin
Declare done int default false;
Declare cliente varchar (50);
Declare pago float;
Declare informe_pago varchar (30);
Declare total_pagos float default
0.0;
Declare curs cursor for select
c.nombre_cliente,sum(p.total) from cliente as c
left join pago as p
On c.codigo_cliente=p.codigo_cliente
Group by c.nombre_cliente;
Declare continue handler for not
found set done=true;
Open curs;
bucle:loop
fetch curs into cliente,pago;
if done then
leave bucle;
end if;
if pago is null then
set informe_pago="sin
pago";
select cliente,pago,informe_pago;
else
select cliente,pago,informe_pago;
set total_pagos= total_pagos + pago;
end if;
end loop bucle;
Close curs;
Select total_pagos;
End
$$
9. Crear un
procedimiento que muestre las distintas gamas de productos con la cantidad de
unidades vendidas de cada gama. Si no supera cierta cantidad (parámetro del
procedimiento) se muestra "POCO
VENDIDA";
al final se muestra el número de
gamas poco vendidas gamas.
Delimiter $$
Drop procedure if exists
jardineria07 $$
Create procedure jardineria07(in
cantidad int)
Begin
Declare done int default false;
Declare nombre_gama varchar (50);
Declare unidades_vendidas int;
Declare informe varchar (50);
Declare curs cursor for select
g.gama,sum(d.cantidad) from producto as p inner
join gama_producto as g
On p.gama=g.gama
Inner join detalle_pedido as d
On
d.codigo_producto=p.codigo_producto
Group by g.gama;
Declare continue handler for not
found set done=true;
Open curs;
bucle:loop
fetch curs into
nombre_gama,unidades_vendidas;
if done then
leave bucle;
end if;
if unidades_vendidas<=cantidad
then
set informe="poco
vendida";
select nombre_gama,unidades_vendidas,informe;
end if;
end loop bucle;
close curs;
End
$$
No hay comentarios:
Publicar un comentario