Evitar mostrar errores en mysql y en vez mostrar mensaje personalizado

Iniciado por Cioouw, 25 Abril 2010, 21:48 PM

0 Miembros y 1 Visitante están viendo este tema.

Cioouw

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.

Shell Root

Depronto, podría servirté algo así: Verificas el error que se producé y despues lo personaliza de la siguiente manera.
Código (sql) [Seleccionar]
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!
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

^Tifa^

Te recomiendo que investigues como se manejan los HANDLER en MySQL para captar las Excepciones. A lo mejor esto te puede ayudar:

Código (sql) [Seleccionar]


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


Cioouw

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.