version 11
Une transaction est un ensemble d'instructions SQL exécutées en bloc. Soit toutes les instructions sont exécutées, soit aucune d'entre elles. Les transactions placent des verrous logiques pendant leur exécution afin de préserver l'intégrité des données. Si la transaction se termine correctement, vous pouvez appeler la commande COMMIT afin de valider et d'enregistrer définitivement les modifications effectuées. Dans le cas contraire, appelez la commande ROLLBACK afin d'annuler toutes les modifications et de restituer la base de données dans son état précédent.
Au niveau de la base de données, il n'y a pas de différence entre une transaction 4D et une transaction SQL. Les deux types de transactions partagent les mêmes données et le même process. Les instructions SQL incluses dans une structure Debut SQL/Fin SQL, la commande CHERCHER PAR SQL et les commandes ODBC appliquées à la base locale sont toujours exécutées dans le même contexte que les commandes 4D standard.
Note : 4D propose l'option "Auto-commit" permettant de démarrer et de valider automatiquement des transactions lors de l'utilisation des commande SIUD (SELECT, INSERT, UPDATE et DELETE) afin de préserver l'intégrité des données. Pour plus d'informations, reportez-vous à la section Implémentations du moteur SQL de 4D.
Les exemples suivants illustrent les différentes combinaisons de transactions.
Ni "John" ni "Smith" ne seront ajoutés dans la table emp :
ODBC LOGIN(SQL_INTERNAL ;"";"") `Initaliser le moteur SQL de 4D SQL
DEBUT TRANSACTION `Démarrer une transaction dans le process courant
Debut SQL
INSERT INTO emp
(NAME)
VALUES ('John');
Fin SQL
ODBC EXECUTER("START") `Autre transaction dans le process courant
ODBC ANNULER CHARGEMENT
ODBC EXECUTER("INSERT INTO emp (NAME) VALUES ('Smith')") `Cette instruction est exécutée dans le même process
ODBC ANNULER CHARGEMENT
ODBC EXECUTER("ROLLBACK") `Annuler la transaction interne du process
ANNULER TRANSACTION `Annuler la transaction externe du process
ODBC LOGOUT
Seul "John" sera ajouté dans la table emp :
ODBC LOGIN(SQL_INTERNAL ;"";"")
DEBUT TRANSACTION
Debut SQL
INSERT INTO emp
(NAME)
VALUES ('John');
Fin SQL
ODBC EXECUTER("START")
ODBC ANNULER CHARGEMENT
ODBC EXECUTER("INSERT INTO emp (NAME) VALUES ('Smith')")
ODBC ANNULER CHARGEMENT
ODBC EXECUTER("ROLLBACK") `Annuler la transaction interne du process
VALIDER TRANSACTION `Valider la transaction externe du process
ODBC LOGOUT
Ni "John" ni "Smith" ne seront ajoutés dans la table emp. La transaction externe annule la transaction interne :
ODBC LOGIN(SQL_INTERNAL ;"";"")
DEBUT TRANSACTION
Debut SQL
INSERT INTO emp
(NAME)
VALUES ('John');
Fin SQL
ODBC EXECUTER("START")
ODBC ANNULER CHARGEMENT
ODBC EXECUTER("INSERT INTO emp (NAME) VALUES ('Smith')")
ODBC ANNULER CHARGEMENT
ODBC EXECUTER("COMMIT") `Valider la transaction interne du process
ANNULER TRANSACTION `Annuler la transaction externe du process
ODBC LOGOUT
"John" et "Smith" seront ajoutés dans la table emp :
ODBC LOGIN(SQL_INTERNAL ;"";"")
DEBUT TRANSACTION
Debut SQL
INSERT INTO emp
(NAME)
VALUES ('John');
Fin SQL
ODBC EXECUTER("START")
ODBC ANNULER CHARGEMENT
ODBC EXECUTER("INSERT INTO emp (NAME) VALUES ('Smith')")
ODBC ANNULER CHARGEMENT
ODBC EXECUTER("COMMIT") `Valider la transaction interne du process
VALIDER TRANSACTION `Valider la transaction externe du process
ODBC LOGOUT