Hola .. pues tengo una duda que me anda rompiendo el coco.
Tengo un procedimiento que inserta datos en una tabla de 2 campos, el primero campo es idpermiso y el segundo es idusuario (unique), desde un procedimiento se insertan datos en la tabla.
el procedimiento es el mismo:
create procedure sp_inserta(id_usuario varchar(100))
begin
insert into permiso (idusuario) values (id_usuario);
end if //
Pues todo funciona siempre y cuando el id_usuario que se envie sea realmente 'unico' .. pero el problema viene cuando envio uno que ya existe. El procedimiento arroja un error. Hay alguna forma de evitar que muestre el error y que muestre un mensaje personalizado, algo asi como "registro no ingresado".
Gracias.
Depronto, podría servirté algo así: Verificas el error que se producé y despues lo personaliza de la siguiente manera.
CREATE PROCEDURE sp_inserta(id_usuario varchar(100))
BEGIN
INSERT INTO permiso (idusuario) VALUES (id_usuario);
IF @@ERROR = 12
PRINT 'Error Personalizado'
END
PD: Creo que era así. Lo codee de memoria... Revizalo!
Te recomiendo que investigues como se manejan los HANDLER en MySQL para captar las Excepciones. A lo mejor esto te puede ayudar:
create procedure sp_inserta(id_usuario char(20))
begin
declare continue handler for sqlstate '23000' set @x = 1;
insert into ejemplo values(id_usuario);
if @x = 1 then select concat('Error llave duplicada');
end if;
end;
//
Gracias, por lo menos con eso del handler se puede especificar el error en concreto, pero que pasaria si yo no quiera saber el error especifico sino solo saber si el registro se inserto o no ¿?
Edito: SOlucionado.
Citar
declare continue handler for sqlwarning set @x=1;
Gracias.