[Pgsql-ayuda] transacciones!!

David Prieto davidp@sgth.es
Wed, 11 Feb 2004 09:01:45 +0100


>=20
> No existe forma de hacer lo que quieres, si hay un error el
> rollback es de forma autom=E1tica y los dem=E1s comandos se=20
> ignoran hasta encontrar una sentencia commit, end o rollback=20
> (que tambi=E9n es ignorada).


	=BFesto es as=ED?

	Es decir: =BFSi hay un error dentro de una transacci=F3n se hace
autom=E1ticamente el rollback?

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

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

	2.- Si el insert ha fallado, es porque ya existe una estad=EDstica
para el art=EDculo (provoca un error por clave duplicada), as=ED 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=EDstica de este
art=EDculo.

	El tema es que ahora quiero meter esto dentro de una
transacci=F3n, junto con otras sentencias. Si, como coment=E1is aqu=ED, =
un
error dentro de la transacci=F3n hace el rollback de forma autom=E1tica,
entonces creo que no voy a poder hacerlo, =BFno?=20

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

Un saludo,
	David Prieto.