![]() |
Transaction en un procedimiento almacenado
Bueno, mi duda es la siguiente:
tengo una base de datos en firebird a la cual le quisiera poner un procedimiento almacenado, que inserte miles de registros a una tabla a partir de los datos de otras tablas, el problema que tengo es que no se como ejecutar la transaccion dentro del procedimiento almacenado después de insertar cada registro a esta tabla, esto lo hice en delphi con un procedimiento, pero el proceso es muy lento. Existe una sentencia similar a IBTransaction1.CommitRetaining para poner dentro de un procedimiento almacenado. De antemano muchas gracias... |
En Firebird no existe. Toda la ejecución del procedimiento se ejecuta dentro de una misma transacción.
De todos modos, podrías tratar de que ese procedimiento realizara una parte de las insersiones y devolviera cuantas hizo. Si hizo más de una, cierras la transaccion, abres una nueva y lo vuelves a lanzar. Cuando devuelva 0, es que no hizo nada, porque no queda nada más para hacer. De este modo, las transacciones serán más cortas (hecho deseable) y guardarán menos información para el caso de que fallen y haya que hacer un rollback. Lo malo es que si falla después de la primera iteración, deberás deshacer los cambios de lo que haya hecho antes manualmente. |
Muchas gracias por tu respuesta duilioisola
Saludos.. |
Cita:
Si todos los registros forman parte de una transacción... la transacción mas corta será aquella que los inserte todos, sin mas espera. Así que yo englobaría todo en una única transacción, tarde lo que tarde. Ahora, si los registros no tienen por que necesariamente pertenecer a una sola transacción, si creo que podrías partir en varios fragmentos una carga muy pesada, lo que beneficiará el tiempo total de ejecución al aliviar la carga de memoria del servidor. Yo mismo he hecho esto, en ciertos procesos de carga masiva donde, por ejemplo, hago un commit cada 5000, 10000 o 25000 registros. Hasta luego. ;) |
La franja horaria es GMT +2. Ahora son las 07:32:30. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi