(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)
oci_commit — Consigna la transacción pendiente de la base de datos
Consigna la transacción pendiente de la conexión de
Oracle dada por connection
. Una consignación finaliza la
transacción actual y hace permanente todos los cambios. Libera todos
los bloqueos que hubiera.
Una transacción comienza cuando la primera sentencia SQL que modifica datos
es ejecutada con oci_execute() usando
la bandera OCI_NO_AUTO_COMMIT
. Las modificaciones posteriores
de datos realizados por otra sentencia serán parte de la misma
transacción. Las modificaciones hechas en una transacción son temporales
hasta que sea consignada o revertida. Los demás usuarios de
la base de datos no verán dichos cambios hasta que sean consignados.
Cuando se insertan datos, se recomienda usar transacciones para mantener la consistencia de datos relacionales y por motivos de rendimiento.
connection
Un identificador de conexión de Oracle, devuelto por oci_connect(), oci_pconnect(), o oci_new_connect().
Devuelve true
en caso de éxito o false
en caso de error.
Ejemplo #1 Ejemplo de oci_commit()
<?php
// Insertar en varias tablas, y revertir los cambios si ocurrió un error
$conn = oci_connect('hr', 'welcome', 'localhost/XE');
$stid = oci_parse($conn, "INSERT INTO mysalary (id, name) VALUES (1, 'Chris')");
// La bandera OCI_NO_AUTO_COMMIT indica a Oracle que no consigne el INSERT inmediatamente
// Use OCI_DEFAULT como bandera para PHP <= 5.3.1. Las dos banderas son equivalentes
$r = oci_execute($stid, OCI_NO_AUTO_COMMIT);
if (!$r) {
$e = oci_error($stid);
trigger_error(htmlentities($e['message']), E_USER_ERROR);
}
$stid = oci_parse($conn, 'INSERT INTO myschedule (startday) VALUES (12)');
$r = oci_execute($stid, OCI_NO_AUTO_COMMIT);
if (!$r) {
$e = oci_error($stid);
oci_rollback($conn); // revertir los cambios en ambas tablas
trigger_error(htmlentities($e['message']), E_USER_ERROR);
}
// Consignar los cambios de ambas tablas
$r = oci_commit($conn);
if (!$r) {
$e = oci_error($conn);
trigger_error(htmlentities($e['message']), E_USER_ERROR);
}
?>
Nota:
Las transacciones son revertidas automáticamente cuando se cierra la conexión, o cuando el script finaliza, lo que suceda antes. Es necesario llamar a oci_commit() para consignar la transacción.
Cualquier llamada a oci_execute() que utilice el modo
OCI_COMMIT_ON_SUCCESS
, de forma explícita o por omisión, consignará cualquier transacción no consignada previamente.Cualquier sentencia DDL de Oracle, como
CREATE
oDROP
, consignará automáticamente cualquier transacción no consignada.