Ver Mensaje Individual
  #3  
Antiguo 31-05-2006
JCDiaz999 JCDiaz999 is offline
Registrado
 
Registrado: sep 2005
Posts: 4
Reputación: 0
JCDiaz999 Va por buen camino
Hola joanajj

Supongo que te refieres a controlar errores en procedimientos almacenados.
Yo tengo en algún procedimiento algo como esto:



Código SQL [-]
FOR SELECT CODIGO, CAMPO1, CAMPO2
FROM INTERFAZ_DATOS
WHERE TRATADO='N'
INTO S_CODIGO, S_CAMPO1, S_CAMPO2 DO
BEGIN
INSERT INTO TABLA_XXX ....
----

UPDATE INTERFAZ_DATOS
SET TRATADO='S'
WHERE CODIGO=S_CODIGO

WHEN ANY DO
BEGIN
INSERT INTO LOG_ERRORES -----
END
END






Este bucle recorre registros de la tabla INTERFAZ_DATOS, va insertando en TABLA_XXX y marca el registro actual como ya tratado.
Si en el insert se produce alguna excepción, salta al WHEN ANY sin pasar por el update. Se inserta en LOG_ERRORES y continua el bucle.
De este modo podemos recorrer todo el bucle. Donde se produzca algún error podemos hacer algo distinto.

Supongo que además te interesará actuar de distinto modo si en error es de primary key, de foreign key, tipo de dato. No lo he probado aún, pero mirando en la documentación de firebird aparecen cosas como:


<FONT face=Courier><FONT size=2><DIV class=frame_codigo_sql>Código SQL [-]<DIV class=texto_codigo_sql id=sql_div_447dcf379d02e><FONT face=Courier>
Responder Con Cita