Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Bases de datos > Firebird e Interbase
Register FAQ Members List Calendar Guía de estilo Today's Posts

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 28/11/2005
lucasarts_18's Avatar
lucasarts_18 lucasarts_18 is offline
Miembro
 
Join Date: Mar 2005
Location: Villa Alemana,Chile
Posts: 1,087
Poder: 23
lucasarts_18 Va por buen camino
Captura de error en Procedimiento almacenado

Hola amigos del foro, tengo una duda con los procedimientos almacenados, tengo un SP que actualiza los registros de un proveedor, yo le paso como parámetro el rut, mi idea es como puedo capturar los errores al momento de actualizar un registro en Firebird.

Gracias de antemano.

Saludos.
__________________
No todo es como parece ser...
Reply With Quote
  #2  
Old 29/11/2005
rastafarey's Avatar
rastafarey rastafarey is offline
Miembro
 
Join Date: Nov 2003
Posts: 927
Poder: 23
rastafarey Va por buen camino
resp

Código SQL [-]
Begin
  /*Codigo a ejecutar*/
  when sqlcode -802 do /*ho el codigo qu esea*/
  /*aqui haces lo que debas hacer con le error*/ 
End
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Reply With Quote
  #3  
Old 29/11/2005
Lepe's Avatar
[Lepe] Lepe is offline
Miembro Premium
 
Join Date: May 2003
Posts: 7,424
Poder: 31
Lepe Va por buen camino
Si es un error en la lógica del negocio, puedes crear tu propia excepción
Código SQL [-]
Create Exception eMinimoAlmacen 'No hay el mínimo de cantidad en el almacen'

y lanzarla desde un SP
Código SQL [-]
  exception eMinimoAlmacen

saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Last edited by Lepe : 29/11/2005 at 18:23.
Reply With Quote
  #4  
Old 29/11/2005
lucasarts_18's Avatar
lucasarts_18 lucasarts_18 is offline
Miembro
 
Join Date: Mar 2005
Location: Villa Alemana,Chile
Posts: 1,087
Poder: 23
lucasarts_18 Va por buen camino
Hola:

Gracias a ambos por la respuesta, logré compilar el procedimiento almacenado, pero existe algún código o algo que me indique un error genérico

algo así:

Código SQL [-]
Begin
    when Error_generico do 
    /*Instrucciones*/
End

Mi idea es en caso de cualquier error pueda entrar en el When

Gracias...Nuevamente

Hasta Luego -
__________________
No todo es como parece ser...
Reply With Quote
  #5  
Old 29/11/2005
Lepe's Avatar
[Lepe] Lepe is offline
Miembro Premium
 
Join Date: May 2003
Posts: 7,424
Poder: 31
Lepe Va por buen camino
No lo he probado, quizás poniendo " when sqlcode <> 0 do "
El cero es operación exitosa.

He visto que se hace mención a la claúsula WHENEVER en el manual de FB, pero no sé su uso , posiblemente sea: "when Whenever do"

saludos y suete
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Reply With Quote
  #6  
Old 29/11/2005
lucasarts_18's Avatar
lucasarts_18 lucasarts_18 is offline
Miembro
 
Join Date: Mar 2005
Location: Villa Alemana,Chile
Posts: 1,087
Poder: 23
lucasarts_18 Va por buen camino
Quote:
Originally Posted by Lepe
No lo he probado, quizás poniendo " when sqlcode <> 0 do "
El cero es operación exitosa.
Veré como anda esto, con referente al manual de firebird, a cual te refieres específicamente ?.

Gracias de nuevo..

__________________
No todo es como parece ser...
Reply With Quote
  #7  
Old 30/11/2005
Lepe's Avatar
[Lepe] Lepe is offline
Miembro Premium
 
Join Date: May 2003
Posts: 7,424
Poder: 31
Lepe Va por buen camino
Rectifico: es en el Data Definition Guide de Interbase 6. Descargable desde ibphenix (datadef.pdf)

pagina 142
Quote:
WHEN
{error [, error …] | ANY}
DO compound_statement

Error-handling statement. When one of the specified errors
occurs, performs compound_statement. WHEN statements, if
present, must come at the end of a block, just before END.

error: EXCEPTION exception_name, SQLCODE errcode or GDSCODE
number.

ANY: Handles any errors.
Código SQL [-]
  WHEN ANY DO
saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Last edited by Lepe : 30/11/2005 at 18:07.
Reply With Quote
  #8  
Old 30/11/2005
rastafarey's Avatar
rastafarey rastafarey is offline
Miembro
 
Join Date: Nov 2003
Posts: 927
Poder: 23
rastafarey Va por buen camino
Resp

Yo solo te dije como podias hacer lso de los erroes te pudes leer la lsiat d erroes desde el manual de interbase ya que son muchos.
A y otra cosa que te dicen con las excepciones si unas firebird1.5 o susperior puedes crear una sola exception vacion y dependiendo de donde se te de el error le concatenas al excepcion el erro que quieres que salg apero cuidate el que le largo d elaos errores no supere los 78 caractres bueno aunque aun nos e por que firebird aun tiene esa restriccion
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Reply With Quote
  #9  
Old 01/12/2005
lucasarts_18's Avatar
lucasarts_18 lucasarts_18 is offline
Miembro
 
Join Date: Mar 2005
Location: Villa Alemana,Chile
Posts: 1,087
Poder: 23
lucasarts_18 Va por buen camino
Hola:

Gracias nuevamente, estoy casi listo con esta duda:

me falla una sola cosa:

Código SQL [-]
 
begin
 
/*instruccion update*/
 
when any do
begin
  cod = 90;
  Exit;
end
cod = 0;
 
suspend;
end;

para que realmente compile bien debo quitar el cod = 0; y el suspend;
Cómo puedo arreglar esto ?
Mi idea es que si no se produce algún error pueda retornar un código, solo eso !!
Muchas Gracias...

Hasta luego -
__________________
No todo es como parece ser...
Reply With Quote
  #10  
Old 01/12/2005
Lepe's Avatar
[Lepe] Lepe is offline
Miembro Premium
 
Join Date: May 2003
Posts: 7,424
Poder: 31
Lepe Va por buen camino
¿como usas el SP?

Me da la impresión de que intentas hacerlo con un EXECUTE PROCEDURE. Si ha de tener el suspend, deberías usarlo como una tabla/vista.

saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Reply With Quote
  #11  
Old 01/12/2005
Carlos Hurtado Carlos Hurtado is offline
Miembro
 
Join Date: Dec 2004
Posts: 30
Poder: 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.
Reply With Quote
  #12  
Old 28/12/2005
lucasarts_18's Avatar
lucasarts_18 lucasarts_18 is offline
Miembro
 
Join Date: Mar 2005
Location: Villa Alemana,Chile
Posts: 1,087
Poder: 23
lucasarts_18 Va por buen camino
Hola a todos:

Gracias por su ayuda y no me quedo otra que sacar el suspend, debo reconocer que llevo poco en esto de firebird y no entiendo mucho para que es el suspend, por ahora estoy tranquilo por que me funciona el SP, gracias a todos nuevamente.

Hasta Luego -
__________________
No todo es como parece ser...
Reply With Quote
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump


All times are GMT +2. The time now is 07:31.


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