1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
/* Ejercicio 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. Antes de realizar el ejercicio añade la columna estrellas a la tabla empleados (ALTER TABLE empleados ADD COLUMN estrellas VARCHAR(10)). Incluir los dos manejadores de error del ejercicio anterior. Ejemplo de funcionamiento: +-------+---------+-----------+ | NUMEM | SALARIO | ESTRELLAS | +-------+---------+-----------+ | 110 | 400 | **** | | 120 | 350 | *** | | 130 | 290 | ** | | 150 | 440 | **** | | 160 | 310 | *** | | 180 | 480 | **** | | 190 | 420 | **** | | 210 | 440 | **** | | 240 | 280 | ** | | 250 | 450 | **** | | 260 | 900 | ********* | | 270 | 380 | *** | ... ... */ -- alter table empleados add stars varchar(5); -- Añade una columna -- alter table empleados change stars estrellas varchar(5); -- Modifica el nombre de una columna -- alter table empleados modify estrellas varchar(10); -- Cambia el tipo de una columna. delimiter $$ drop procedure if exists 1x28 $$ create procedure 1x28() begin declare finCursor boolean default false; declare todoOk boolean default true; declare textoError tinytext; declare v_numem integer; declare c_empleados cursor for select numem from empleados for update; declare continue handler for not found set finCursor = true; declare continue handler for sqlexception begin set todoOk = false; set textoError = "Sql Exception"; end; START TRANSACTION; open c_empleados; fetch c_empleados into v_numem; while finCursor = false do update empleados set estrellas = lpad('', salario div 100, '*') where numem = v_numem; -- Lpad nos ahorra tener que hacer una iteracion solo para concatenar estrellas. fetch c_empleados into v_numem; end while; close c_empleados; if todoOk then commit; else select textoError; rollback; end if; end $$ delimiter ; -- call 1x28; -- select numem, salario, estrellas from empleados; |