El control de transacción impone la integridad de base de datos garantizando que los lotes de operaciones SQL se ejecutan completamente o no se ejecutan. Los comandos del control de transacción son BEGIN, COMMIT y ROLLBACK.
Se admite el modo de transacción de autocompromiso. En esta modalidad, todos los comandos SQL se confirman cuando los ejecuta. Si el sistema encuentra un comando SQL antes de un comando BEGIN SQL, ejecuta el comando SQL en modalidad de transacción de confirmación automática. Si el sistema encuentra un comando BEGIN SQL, ejecuta todos los comandos SQL sucesivos dentro de la transacción. Para finalizar una transacción, debe emitir un comando COMMIT o ROLLBACK SQL.
Algunos comandos SQL están prohibidos dentro del bloque de transacción BEGIN/COMMIT. Por ejemplo:
- BEGIN
- [CREATE | DROP] DATABASE
- Operaciones ALTER TABLE [ADD | DROP] COLUMN
- SET AUTHENTICATION
- [SET | DROP] CONNECTION
- GROOM TABLE
- GENERATE STATISTICS
- SET SYSTEM DEFAULT HOSTKEY
- [CREATE | ALTER|DROP] KEYSTORE
- [CREATE | DROP] CRYPTO KEY
- SET CATALOG
- SET SCHEMA dbname.schemaname,
donde dbname no es la base de datos actual
Estos comandos SQL también están prohibidos dentro del cuerpo de un procedimiento almacenado
Netezza Performance Server. Si utiliza uno de estos comandos dentro de un bloque de transacción o procedimiento almacenado, el sistema muestra un error similar al siguiente mensaje:
ERROR: CREATE DATABASE: may not be called in a transaction block or stored procedure
Nota: Las sesiones simultáneas podrían arrojar el errorCannot
insert a duplicate key into unique index. Este problema se produce cuando hay varias sesiones conectadas a la misma base de datos y esquema, y en esas sesiones los usuarios inician un bloque de transacciones y emiten un comando CREATE OBJECT nombre_objeto con el mismo nombre_objeto. Todos los mandatos
CREATE subsiguientes para ese nombre_objeto esperan hasta que se ha confirmado
el primer comando CREATE y, a continuación, los comandos CREATE nombre_objeto
restantes fallan con el error de clave duplicada. Si el primer comando
CREATE OBJECT nombre_objeto
se retrotrae, el sistema pasa al siguiente bloque de sesiones/transacciones que ha emitido
un comando CREATE para ese nombre_objeto y
los comandos CREATE restantes para ese nombre_objeto fallan
con el error de clave duplicada. Para objetos de tabla, la sintaxis IF NOT EXISTS
dentro del bloque de transacciones no impide que los comandos
CREATE TABLE subsiguientes para nombre_objeto fallen con el error
de clave duplicada.