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 |
/* Tablas Centros/Departamentos/Empleados (script primeros_pasos.sql) Ejercicio 22: Realiza un procedimiento que reciba como argumentos los datos de un empleado (los 9 parámetros correspondientes a las 9 columnas) y los almacene en la tabla empleados. Además de los 4 manejadores de error contemplados en el ejercicio 21 anterior se deberá añadir otro que trate el error de que el departamento al que se le asigna al empleado (numde) debe existir previamente o ser nulo (integridad referencial). */ delimiter $$ drop procedure if exists 1x22 $$ create procedure 1x22( p_numde int, p_extel int, p_fecna date, p_fecin date, p_salario int, p_comision int, p_numhi int, p_nomem VARCHAR(18), out p_errorNum int, out p_errorText varchar(100)) modifies sql data begin -- DECLARACIONES: declare clave_repetida_error condition for 1062; declare clave_nula_error condition for 1048; declare tabla_inexistente_error condition for 1146; declare clave_ajena_error condition for 1452; declare continue handler for clave_repetida_error begin set p_errorNum = 1062; set p_errorText = 'Clave duplicada'; end; declare continue handler for clave_nula_error begin set p_errorNum = 1048; set p_errorText = 'Clave nula'; end; declare continue handler for tabla_inexistente_error begin set p_errorNum = 1146; set p_errorText = 'Tabla inexistente'; end; declare continue handler for clave_ajena_error begin set p_errorNum = 1452; set p_errorText = 'El departamento no existe ni es nulo'; end; declare continue handler for sqlexception begin set p_errorNum = -1; set p_errorText = 'Ocurrió un error'; end; -- INICIO OPERACIONES set p_errorNum = 0; select max(numem) into @max from empleados; insert into empleados values( @max+1, p_numde, p_extel, p_fecna, p_fecin, p_salario, p_comision, p_numhi, p_nomem ); set @max := null; if p_errorNum = 0 then set p_errorText = 'Alta de alumno realizada'; end if; end $$ delimiter ; -- call 1x22( 110, 22, '1988-04-21', '2012-04-26', 1300, 50, 3, 'Lacasa, Perez', @errorId, @errorText); -- select @errorId as 'ID Error', @errorText as 'Descripcion'; |