En algunos documentos había leído que SET TRANSACTION iniciaba una transacción y en otros que no la iniciaba. Yo tenía entendido que no la iniciaba, pero me quedó la duda, así que decidí comprobar quien tenía razón. ¿SET TRANSACTION inicia una transacción o no la inicia?

Después de conectarme a la Base de Datos con ISQL escribí un SELECT que me muestra datos de todas las transacciones activas, como puedes ver en la Captura 1.

TRANSACCIONES2

Captura 1. Si haces clic en la imagen la verás más grande

El SELECT me muestra que hay dos transacciones activas, lo cual es lo correcto. Una de ellas es interna del ISQL y la otra es donde los usuarios escriben sus comandos.

TRANSACCIONES3

Captura 2. Si haces clic en la imagen la verás más grande

Escribí un ROLLBACK para finalizar la transacción actual del usuario.

TRANSACCIONES4

Captura 3. Si haces clic en la imagen la verás más grande

Después escribí un SET TRANSACTION que me servirá para poder verificar a que hora se inició la transacción.

TRANSACCIONES5

Captura 4. Si haces clic en la imagen la verás más grande

Y a continuación escribí otro SELECT, para ver los datos de las transacciones activas. Como muestra la Captura 4 hay dos transacciones activas: la interna del ISQL y la del usuario. La del usuario corresponde al momento en que se hizo el SELECT o sea que la transacción se inició con el SELECT, no con el SET TRANSACTION. Si se hubiera iniciado con el SET TRANSACTION entonces ambas transacciones hubieran tenido 23:38 en la columna MON$TIMESTAMP, pero no es así. La transacción interna del ISQL sí inició a las 23:38 pero la transacción del usuario inició a las 23:42 que es el momento en que se escribió el SELECT.

En otras palabras, está comprobado que el SET TRANSACTION no inicia la transacción sino que sirve para establecer los parámetros que serán utilizados por la siguiente transacción. La transacción la inicia el Cliente del Firebird cuando no hay una transacción activa y se ejecuta un comando (INSERT, UPDATE, DELETE, SELECT, EXECUTE PROCEDURE, etc.)

Artículos relacionados:

Entendiendo a las transacciones

El índice del blog Firebird21