Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Uso de Signal para devolver mensaje de Error.

Estas en el tema de Uso de Signal para devolver mensaje de Error. en el foro de Mysql en Foros del Web. Buenas Tardes Amigos del foro. quería ver si me pueden ayudar en un Problema que tengo con el uso del Signal. Tengo un store procedure ...
  #1 (permalink)  
Antiguo 11/05/2014, 16:59
 
Fecha de Ingreso: junio-2008
Mensajes: 13
Antigüedad: 15 años, 9 meses
Puntos: 0
Uso de Signal para devolver mensaje de Error.

Buenas Tardes Amigos del foro. quería ver si me pueden ayudar en un Problema que tengo con el uso del Signal. Tengo un store procedure al cual le paso como parámetro los datos de un documento este procedure levanta un cursor con el detalle de dicho documento y va actualizando los stocks de los productos pero en el caso que alguno de los productos del documento no tenga stock estoy utilizando el signal para cortar el proceso y que me devuelva un mensaje de error indicándome cual es el producto que no tiene saldo. El Procedure funciona es decir que cuando no encuentra saldo se corta el proceso pero no me devuelve el mensaje de Error. les muestro parte del código para que me den una mano.

Código MySQL:
Ver original
  1. DECLARE alm CHAR(4);
  2. DECLARE cod varchar(20);
  3. DECLARE cant int;
  4. DECLARE specialty CONDITION FOR SQLSTATE '45000';
  5. DECLARE items cursor for select id_alm,id_articulo,sum(cantidad) from ActStock where id_cia=cia and tipo=tip and serie=seri and numero=num GROUP BY ID_ARTICULO;
  6. DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
  7. SET @d=concat('insert into ActStock select ''',cia,''',id_almacen,tipo,serie,numero,id_Articulo,cantidad from ',TAB,' where tipo=''',TIP,''' and serie=''',SERI,''' and numero=''',NUM,'''');
  8. PREPARE stmt2 FROM @d;
  9. EXECUTE stmt2;
  10. DROP PREPARE stmt2;
  11. OPEN items;
  12.     FETCH items INTO alm,cod,cant;
  13.     IF NOT done THEN
  14.   IF OPE='-' then  
  15.             SET @d=CONCAT('SELECT @s:=STOCK FROM TB_STOCK',CIA,' WHERE ID_AGENCIA=''',AGE,''' AND ID_ALMACEN=''',ALM,''' AND ID_PRODUCTO=''',COD,'''');
  16.             PREPARE stmt2 FROM @d;
  17.             EXECUTE stmt2;
  18.             DROP PREPARE stmt2;
  19.             IF @s < CANT then
  20.                 DELETE FROM ActStock where id_cia=cia and tipo=tip and serie=seri and numero=num;
  21.                 SIGNAL specialty SET MESSAGE_TEXT = 'Producto sin stock';
  22.             END IF;
  23.         END IF;  
  24.     SET @d=CONCAT('INSERT INTO TB_STOCK',CIA,' values(''',AGE,''',''',alm,''',''',cod,''',''',if(OPE='+',cant,cant * -1),''',''0'') on duplicate key update stock=stock ',OPE,' ',cant);
  25.             PREPARE stmt2 FROM @d;
  26.       EXECUTE stmt2;
  27.        DROP PREPARE stmt2;
  28.     END IF;
  29. UNTIL done END REPEAT;
  30. CLOSE items;
  31. DELETE FROM ActStock where id_cia=cia and tipo=tip and serie=seri and numero=num;
De antemano muchas gracias. cualquier ayuda me servira.
  #2 (permalink)  
Antiguo 13/05/2014, 20:59
 
Fecha de Ingreso: junio-2008
Mensajes: 13
Antigüedad: 15 años, 9 meses
Puntos: 0
Procedure no da mensaje de ERROR

Hola amigos. hace poco puse un mensaje sobre el uso del signal pues necesito provocar un error y personalizar su mensaje en vista que no puedo resolverlo, dándole vueltas al asunto ahora quiero provocar un error con un mensaje de la misma base de datos antes de eso cargo el mensaje en una variable etc. el caso es que hice una pequeña prueba. creando el siguiente procedure de prueba que produce un error.

BEGIN
SET @error_count = @error_count + 1;
DROP TABLE xx;
END;

la Tabla 'XX' no existe por lo cual dicho procedure me debería dar un error de que la tabla no existe. sin embargo al principio cuando llamaba al procedure me salia 'Query OK, 0 Rows Afeccted'. después de intentar varias veces y cuando puse lo siguiente: set @error_count=0;call p(); . Recién me salio el bendito mensaje '1051 - Unknown table 'xx' '.

Bueno mi duda es la siguiente ¿por que en un momento dado el procedure no da error y despues si?, ¿Existe una variable, configuración para que el procedure devuelva un mensaje de error ? . muchas gracias de Antemano por su ayuda.
  #3 (permalink)  
Antiguo 13/05/2014, 21:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Uso de Signal para devolver mensaje de Error.

Tienes un único problema. No abras dos threads (PDU de FDW).
Mañana analizo tu SP, pero a mi entender el problema inicial es que tu modelo de datos no es muy adecuado para realizar esas tareas de forma eficiente. Crearr una tabla de stock por cada empresa o por cada sucursal, y no plantear un diseño mas genérico, te complica todo ese proceso, que podría realizarse con consultas más simples.
En cuanto al uso de SIGNAL... me da la impresión de que no lo estás haciendo en función de las especificaciones del manual...

Mañana lo miro con más tiempo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: mensaje, procedure, select, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:23.