Ver Mensaje Individual
  #11  
Antiguo 01-12-2005
Carlos Hurtado Carlos Hurtado is offline
Miembro
 
Registrado: dic 2004
Posts: 30
Reputación: 0
Carlos Hurtado Va por buen camino
Un grano de arena al problema de manejo de errores

Hola amigos aqui adjunto una SP que actualiza stock con manejo de errores:

Código SQL [-]
SET TERM ^;
CREATE PROCEDURE ACTUALIZA_VALESDETALLE(
 VID_VALE VARCHAR(12),
 VID_PRODUCTO VARCHAR(12),
 VCANTIDAD DECIMAL(7,2),
 VDESCRIPCION VARCHAR(40),
 VVALORUNITARIO NUMERIC,
 VTOTAL NUMERIC)
RETURNS (
 FLAG SMALLINT)
AS
 DECLARE VARIABLE V_STOCK DECIMAL(7,2); 
 BEGIN
  INSERT INTO VALESDETALLE
  (
   ID_VALE,
   ID_PRODUCTO,
   CANTIDAD,
   DESCRIPCION,
   VALORUNITARIO,
   TOTAL
  )
  VALUES 
  (
   :VID_VALE,
   :VID_PRODUCTO,
   :VCANTIDAD,
   :VDESCRIPCION,
   :VVALORUNITARIO,
   :VTOTAL
  );
  SELECT EXISTENCIA FROM STOCKMAESTRO WHERE ID_PRODUCTO = :VID_PRODUCTO
    INTO :V_STOCK;  
  IF (:V_STOCK >= :VCANTIDAD) THEN 
  BEGIN
   UPDATE STOCKMAESTRO 
   SET EXISTENCIA = :V_STOCK - :VCANTIDAD
    WHERE ID_PRODUCTO = :VID_PRODUCTO;
   FLAG = 0;
   WHEN GDSCODE lock_conflict DO
    FLAG = 2;
   WHEN ANY DO
    FLAG = 3;
 END
 ELSE
   EXCEPTION NO_STOCKDETALLE;  
 WHEN EXCEPTION NO_STOCKDETALLE DO
  FLAG = 1;
 END ^
SET TERM; ^

La variable FLAG retorna un valor que corresponde al tipo de eroor para poder manejarlo. Pero:
Cuando provoco un error de bloqueo en todas las ocasiones me entrega un valor de FLAG = 3. Esto aun no lo puedo solucionar ya que fuera de la SP manejo los errores segun sean 1, 2 o 3.

Espero sirva el comentario.
Responder Con Cita