Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-01-2007
Carlos Hurtado Carlos Hurtado is offline
Miembro
 
Registrado: dic 2004
Posts: 30
Poder: 0
Carlos Hurtado Va por buen camino
Procedimiento almacenado no captura error

Hola amigos.
En un sistema de ventas he diseñado un procedimiento almacenado que actualiza las ventas y ademas intenta capturar un error de lock_conflict o cualquier otro a traves de la variable flag.

Esta es la rutina:
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
   FLAG = 1;
 END ^
SET TERM; ^

He creado un lock_conflict y al ejecutar el programa me da un mensaje de error "Lock conflict on no wait transaction" en circunstancias que debiera ejecutar la rutina que corresponde al flag = 2.

La linea:

Código SQL [-]
  WHEN GDSCODE lock_conflict DO

la he reemplado por:

Código SQL [-]
  WHEN SQLCODE lock_conflict DO

y tambien por:

Código SQL [-]
  WHEN SQLCODE -901 DO
y no obtengo el resultado esperado.

Tambien he colocado las instrucciones "WHEN..." despues de:
Código SQL [-]
  ELSE
   FLAG = 1;

Espero que puedan ayudarme en esto.
Gracias.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Procedimiento almacenado efelix MS SQL Server 7 21-11-2007 17:53:00
Procedimiento Almacenado egostar Firebird e Interbase 4 15-12-2006 02:04:07
Captura de error en Procedimiento almacenado lucasarts_18 Firebird e Interbase 11 28-12-2005 15:02:42
Procedimiento almacenado y Ado LucianoRey MS SQL Server 11 06-07-2004 22:55:23
Procedimiento Almacenado Ulises Providers 3 30-01-2004 18:14:58


La franja horaria es GMT +2. Ahora son las 09:18:15.


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
Copyright 1996-2007 Club Delphi