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.