y para el segundo ejercicio el script primeros_pasos (lo puedes descargar aquí).
Ejercicio 21. Realiza
un procedimiento a partir del procedimiento error8
del apartado 7.6 de los materiales. Deberás completarlo incluyendo un manejador
de error con condición de error con nombre definido por el usuario de la misma
manera que se ha hecho con los otros dos manejadores de ese tipo (clave nula y
clave repetida) para tratar el error de tabla inexistente.
delimiter $$
drop procedure if exists veintiuno $$
create procedure veintiuno(p_id int, p_alumno
varchar(30), out p_error_num int, out p_error_text varchar(100))
modifies sql data
begin
declare
clave_repetida_error condition for 1062;
declare
clave_nula_error condition for 1048;
declare
tabla_inexistente_error condition for 1146;
declare
continue handler for clave_repetida_error
begin
set
p_error_num = 1062;
set
p_error_text = 'Clave duplicada';
end;
declare continue
handler for clave_nula_error
begin
set
p_error_num = 1048;
set
p_error_text = 'Clave nula';
end;
declare
continue handler for tabla_inexistente_error
begin
set
p_error_num = 1146;
set
p_error_text = 'Tabla inexistente';
end;
declare
continue handler for sqlexception
begin
set p_error_num = -1;
set p_error_text = 'Ocurrió un
error';
end;
set
p_error_num = 0;
insert into alumnos values(p_id, p_alumno);
if p_error_num = 0 then
set p_error_text = 'Alta de alumno
realizada';
end if;
end $$
delimiter ;
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 veintidos $$
create procedure veintidos(vNumem int, vNumde int,
vExtel int, vFecna date, vFecin date, vSalario int, vComision int, vNumhi int,
vNomem varchar(18), out p_error_num int, p_error_text varchar(100))
modifies sql data
begin
declare
clave_repetida_error condition for 1062;
declare
clave_nula_error condition for 1048;
declare
tabla_inexistente_error condition for 1146;
declare
integridad_referencial_error condition for 1452;
declare
continue handler for clave_repetida_error
begin
set
p_error_num = 1062;
set
p_error_text = 'Clave duplicada';
end;
declare
continue handler for clave_nula_error
begin
set
p_error_num = 1048;
set
p_error_text = 'Clave nula';
end;
declare
continue handler for tabla_inexistente_error
begin
set
p_error_num = 1146;
set
p_error_text = 'Tabla inexistente';
end;
declare
continue handler for integridad_referencial_error /* Código de error aportado
por Raul */
begin
set
p_error_num = 1452;
set p_error_text = 'Error en la
integridad referencia de los datos con la tabla departamentos';
end;
declare
continue handler for sqlexception
begin
set
p_error_num = -1;
set
p_error_text = 'Ocurrió un error';
end;
set
p_error_num = 0;
insert into
empleados values (vNumem, vNumde, vExtel, vFecna, vFecin, vSalario, vComision,
vNumhi, vNomem);
if
p_error_num = 0 then
set
p_error_text = 'Alta de empleado realizada';
end if;
end $$
delimiter ;
0 comments:
Publicar un comentario