No es un bug, es una característica no documentada

jueves, 26 de marzo de 2015

Bases de datos. SQL programado (IX). Ejercicios (IV)

20:06 Posted by Inazio , No comments
Ejercicos de la hoja 4 de los temas 6/7. Para el primer ejercicio se ha utilizado el siguiente ejemplo

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 comentarios:

Publicar un comentario