FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Continuar Procedure a pesar del salto de excepción
Hola a tod@s,
tengo un problema con un procedure. BBDD: firebird 1.5 El procedure realiza una serie de inserts según unas condiciones. En el último insert de este procedure y que inserta en una determinada tabla X, salta una excepción. Pusimos una excepción en un trigger before insert que si no se cumple otra condición no se realice el insert en la tabla X i salte esta excepción para capturarla y mostrarla por pantalla en la aplicación delphi. El problema viene que al saltar la excepción en esta última tabla X, el resto de inserts anteriores no se guardan. Hace rollback cuando salta la excepción. Quisiera saber si existe la posibilidad de que aunque salte la excepción del procedure firebird, continúe con el procedure y haga finalmente commit del mismo. Un saludo y gracias por adelantado. |
#2
|
||||
|
||||
A pesar de que lo mejor sería verificar si se va a dar la excepción y actuar en consecuencia, existe una posibilidad:
WHEN XXX DO
|
#3
|
|||
|
|||
Continuar Procedure a pesar del salto de excepción
Hola duilioisola,
he probado de poner el código que me comentas. En concreto he probado en mi procedure:
Ambas opciones han salido con rollback del procedure así que todavía no me queda resuelto el problema. No sé como hacer para que aun saltando una excepción en un insert, el resto de inserts ejecutados anteriormente hagan commit. Última edición por santiaguinillo fecha: 02-06-2008 a las 14:43:08. Razón: poner título |
#4
|
||||
|
||||
Prueba con
* when SQLCODE -803 do SUSPEND ; * when EXCEPTION SUPERA_IMPORTE DO SUSPEND ; Cada vez que un procedimiento encuentra un suspend, devuelve los valores que tenga en el RETURNS() y espera a que le pidan el siguiente. Aunque no devuelvas nada, el SUSPEND hará que devuelva el control a tu programa y puedas hacer un commit o rollback, según te convenga. |
#5
|
|||
|
|||
Pruebas con do suspend KO
Hola duilioisola,
¿pero el commit o rollback quieres decir que lo ponga en el código delphi? Porque he hecho lo siguiente y sigue sin hacerme commit (en el procedure he puesto when EXCEPTION SUPERA_IMPORTE DO SUSPEND):
Cita:
Última edición por santiaguinillo fecha: 02-06-2008 a las 16:14:19. |
#6
|
||||
|
||||
Supongo que si no sigue es porque la excepción que salta no es la que esperas en el WHEN EXCEPCION DO...
Prueba a poner WHEN ANY DO... O prueba a ver cuál es la excepción que llega con un ShowMessage.
Por más que le digas que haga un commit, si ha saltado una excepción no grabará los datos. Si quieres envíanos el código de tu procedimiento, para que le hechemos una mirada. Pero como dije anteriormente, quizás sea mejor filtrar los casos para los que se dá la excepción. |
#7
|
||||
|
||||
Saludos.
Puedes ir haciendo commit por cada inserción es inefectivo pero es una solución. También puedes poner el código que tienes y cuando salte la excepción "forza" el commit.
__________________
Gracias, Rolphy Reyes |
#8
|
|||
|
|||
Hacer commit
Hola RolphyReyes,
el problema es que al poner commit en el procedure me da error al compilar. Es decir, no puedo poner commit dentro del procedure. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
continuar una numeracion con Qreport | Alfredo | Impresión | 7 | 23-10-2007 11:05:53 |
Key violation. Continuar con siguiente registro | CHiCoLiTa | Conexión con bases de datos | 11 | 14-02-2007 21:48:37 |
Continuar numeracion en impresion !! Help | RJF | Impresión | 2 | 07-11-2006 04:43:17 |
Desea continuar? SI NO CANCELAR (3 Botones en el formulario) | dmassive | PHP | 3 | 26-08-2005 19:22:08 |
No se continuar | pepelu1975 | Varios | 1 | 19-02-2004 11:02:22 |
|