28.-
/* “Representación gráfica de los salarios de los empleados”.
Realizar un procedimiento que utilice un cursor de actualización para rellenar la columna estrellas
de la tabla empleados con un asterisco por cada 100 unidades de salario.
Incluir los dos manejadores de error del ejercicio anterior. */
delimiter $$
drop procedure if exists ejercicio28 $$
create procedure ejercicio28(out p_error_num int, out p_error_text varchar(100))
begin
declare v_numem int;
declare v_salario int;
declare v_contador int;
declare v_estrellas varchar(10);
declare v_ultima_fila int default 0;
declare empleados_cursor cursor for
select numem, truncate(salario/100, 0)
from empleados
for update;
declare continue handler for not found
set v_ultima_fila=1;
declare exit handler for sqlexception
begin
set p_error_num=-1;
set p_error_text='Ocurrió un error';
rollback;
end;
set p_error_num=0;
start transaction;
open empleados_cursor;
empleados : loop
fetch empleados_cursor into v_numem, v_salario;
if v_ultima_fila=1 then
leave empleados;
end if;
set v_contador=0;
set v_estrellas='';
while v_contador < v_salario do
set v_estrellas=concat(v_estrellas, '*');
set v_contador=v_contador+1;
end while;
update empleados set estrellas=v_estrellas
where numem=v_numem;
end loop empleados;
close empleados_cursor;
if p_error_num=0 then
commit;
set p_error_text='alta de alumno realizada';
end if;
end $$
delimiter ;
0 comentarios:
Publicar un comentario