RE: [Pgsql-ayuda] transacciones!!

From: "David Prieto" <davidp(at)sgth(dot)es>
To: <pgsql-ayuda(at)tlali(dot)iztacala(dot)unam(dot)mx>
Subject: RE: [Pgsql-ayuda] transacciones!!
Date: 2004-02-11 08:01:45
Message-ID: 010701c3f075$4e282700$1701a8c0@davidp
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


>
> No existe forma de hacer lo que quieres, si hay un error el
> rollback es de forma automática y los demás comandos se
> ignoran hasta encontrar una sentencia commit, end o rollback
> (que también es ignorada).

¿esto es así?

Es decir: ¿Si hay un error dentro de una transacción se hace
automáticamente el rollback?

Lo digo porque tengo una tabla en la que se guardan unas
estadísticas. Y tengo un proceso que debe cargar datos en esa tabla. Si
ya existe una estadística para el artículo, la debe actualizar. Y si no
existe, debe crearla. El código del artículo es clave primaria, y lo que
estoy haciendo para optimizar un poco es:

1.- insert en la tabla de estadísticas, sin mirar si ya existe o
no. Si no existía estadística para el registro, se va a crear haciendo
solamente este "insert".

2.- Si el insert ha fallado, es porque ya existe una estadística
para el artículo (provoca un error por clave duplicada), así que
directamente hago un "update".

De esta manera me estoy ahorrando hacer un "select" al
principio, para comprobar si existe o no existe la estadística de este
artículo.

El tema es que ahora quiero meter esto dentro de una
transacción, junto con otras sentencias. Si, como comentáis aquí, un
error dentro de la transacción hace el rollback de forma automática,
entonces creo que no voy a poder hacerlo, ¿no?

Por otro lado... Si directamente hago el "update... Where
articulo=xxxx", y no existe registro para este artículo, el update no me
da error, pero me informa de que ha actualizado 0 registros. Estoy
trabajando con Delphi+ADO+ODBC. ¿Puedo saber el nº de registros
afectados por el update en esta configuración? (lo de ADO no lo puedo
cambiar: la aplicación debe funcionar con PostgreSQL, pero también con
Access en determinadas situaciones, así que necesito una arquitectura
que me permita acceder de forma transparente a todas estas fuentes de
datos. Sí que podría cambiar ADO+ODBC por algún componente ADO para
acceder a PostgreSQL, si esto me resolviera algo).

Un saludo,
David Prieto.

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Rafa Rodriguez Hernandez 2004-02-11 10:59:49 [Pgsql-ayuda] Cluster de postgres
Previous Message Jorge Lopez 2004-02-11 00:20:57 [Pgsql-ayuda] Funciones large objects