Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Captura de GDSCODE Error en Stored Procedure (https://www.clubdelphi.com/foros/showthread.php?t=27986)

Carlos Hurtado 06-12-2005 17:05:15

Captura de GDSCODE Error en Stored Procedure
 
Hola amigos he intentado resolver el problema de poder definir que tipo de error ha ocurrido y he fracasado. he seguido las directivas del libro 'The Firebird Book' y no he podido obtener resultados.
Esta es la procedure:


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
   BEGIN 
    FLAG = 2;
    EXIT;
   END
   WHEN ANY DO
    FLAG = 3;
 END
 ELSE
   EXCEPTION NO_STOCKDETALLE;  
 WHEN EXCEPTION NO_STOCKDETALLE DO
  FLAG = 1;
 END ^

Como pueden ver establezco 3 alternativas de error.
Cuando es un error de stock(Flag=1) funciona bien.
Pero cuando es un error 'lock_conflict' la SP me devuelve FLAG=3, o sea que el error se va por el camino 'WHEN ANY DO'.
Que puedo hacer para que cuando sea un error de 'lock_conflict' este se vaya por el lado de FLAG=2.
Gracias.


La franja horaria es GMT +2. Ahora son las 07:14:10.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi