Noticias

Integridad Transaccional

Si la propiedad Integridad Transaccional (IT) vale NO, dependiendo del DBMS, se pueden tener diferentes problemas. A continuación un detalle de cada uno: Oracle, DB2/Common Servers y Sql server, Informix y DB2/400.

Si la propiedad Integridad Transaccional (IT) vale NO, dependiendo del DBMS, se pueden tener diferentes problemas. A continuación un detalle de cada uno:

Oracle

Presenta el inconveniente de cerrar los cursores que actualizan una vez que se realiza el “commit”. Si se trabaja con IT en Yes, es posible controlar este error evitando poner un “commit” dentro de un For Each (ver documentación de la propiedad Generate FOR UPDATE OF clause de Oracle).
El tema es mas complicado cuando se trabaja con IT en NO, dado que Oracle (como algunos otros DBMSs) en realidad no desactiva la IT, sino que entran en modo “Autocommit”.  Esto provoca que el problema se presente mas frecuentemente dado que el “commit” se hace automáticamente (no por GeneXus), de este modo es imposible controlar en la aplicación el momento en que se realiza, quedando una alta probabilidad de que cuando se realice un “commit” haya algún cursor de actualización abierto y se provoque por lo tanto, un error.
El “work around” es: cambiar el valor de la propiedad “Generate for update clause” en NO, exponiéndose a las consecuencias explícitas en la documentación de dicha propiedad.
El error en este caso es: ORA-01002: BUSQUEDA FUERA DE SECUENCIA (Fetch out of sequence)

DB2/Common Servers y Sql server

Al igual que en Oracle, en realidad no se deshabilita la IT sino que se entra en modo “Autocommit”. Pero en estos DBMS no se cierran los cursores al hacer un “commit”, sino que se pierden los “locks”, por lo que, también dependiendo del momento en que el driver realice el “commit”, puede provocarse o no un error.
En este caso no hay “work around” y la única solución es no usar esta propiedad en NO. 

Informix y DB2/400

Estos DBMS realmente desactivan la IT por lo tanto no presentan inconvenientes.

Resumiendo:

La propiedad en SI permite gestionar correctamente la integridad transaccional, esencial para un buen procesamiento  de la información.
Esta propiedad en NO tiene consecuencias que son, en principio, imprevisibles, dependiendo de las características particulares de cada DBMS. Si el usuario entiende que tiene razones importantes para utilizar esta propiedad en NO, debe tener claras las limitaciones que su decisión implica y un profundo conocimiento del DBMS que vaya a utilizar para operar correctamente con esas características (cierre imprevisto de cursores, etc.). ARTech no está en condiciones de soportar las consecuencias de esta decisión.