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 Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-02-2008
teatry teatry is offline
Miembro
 
Registrado: sep 2005
Posts: 23
Poder: 0
teatry Va por buen camino
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...
Responder Con Cita
  #2  
Antiguo 18-02-2008
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
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.
Responder Con Cita
  #3  
Antiguo 18-02-2008
teatry teatry is offline
Miembro
 
Registrado: sep 2005
Posts: 23
Poder: 0
teatry Va por buen camino
Muchas gracias por tu respuesta duilioisola
Saludos..
Responder Con Cita
  #4  
Antiguo 18-02-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cita:
Empezado por duilioisola Ver Mensaje
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.
Es deseable que las transacciones sean cortas... pero, desde mi punto de vista, haciendo esto la transacción como tal perdería sentido.
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.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
Respuesta



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 rruffino Conexión con bases de datos 1 25-04-2007 18:52:51
Procedimiento Almacenado pichi Vignola Firebird e Interbase 2 17-08-2006 01:07:38
Procedimiento almacenado y Ado LucianoRey MS SQL Server 11 06-07-2004 22:55:23
procedimiento almacenado haron Firebird e Interbase 2 29-09-2003 01:09:56


La franja horaria es GMT +2. Ahora son las 21:06:42.


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