| 
					 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';  |