Bien démarrer...
Les propriétés ACID des SGBDR (systèmes de gestion de bases de données relationnelles) sont liées à la notion de transaction.
Mais comment démarrer une transaction ? Démonstration avec PostgreSQL 9.6 (loutil ligne de commande psql est configuré par défaut) :
Nous avons ici utilisé le fait que CURRENT_TIMESTAMP retourne toujours lheure de début de transaction. Cela permet de constater quil est possible de démarrer explicitement une transaction avec START TRANSACTION et que la transaction est effectivement démarrée dès lexécution de cette commande.
Mais il est aussi possible dexécuter des commandes sans avoir utilisé START TRANSACTION. Dans ce cas, à chaque commande correspond une transaction immédiatement validée. Ce comportement ne peut dailleurs pas être désactivé côté serveur. Pour éviter ce comportement, le client doit donc explicitement démarrer une transaction avec START TRANSACTION avant denvoyer dautres commandes. Cela peut être fait automatiquement par certains outils clients comme psql (\set AUTOCOMMIT off).
Comment se comporte Oracle à présent ? Démonstration avec Oracle 12.1.0.2 :
Tout dabord, Oracle ne permet PAS de démarrer explicitement une transaction avec START TRANSACTION. START est en fait une commande sqlplus. Oracle interprète donc notre commande START TRANSACTION comme une demande dexécuter le contenu dun fichier TRANSACTION.sql, ce qui na rien à voir avec notre sujet.
Mais il est bien sûr tout de même possible de démarrer une transaction avec Oracle. Nous ne disposons pas dune fonction donnant lheure de début de transaction donc nous interrogeons la vue v$transaction afin de savoir si une transaction est démarrée dans notre session. Cela permet de constater quune transaction est implicitement démarrée à la première commande DML (INSERT, UPDATE, DELETE, MERGE).