PHP.nl

oci_rollback

oci_rollback

Rolls back the outstanding database transaction

bool **oci_rollback** resource $connection

Reverts all uncommitted changes for the Oracle and ends the transaction. It releases all locks held. All Oracle are erased. connection``SAVEPOINTS

A transaction begins when the first SQL statement that changes data is executed with using the flag. Further data changes made by other statements become part of the same transaction. Data changes made in a transaction are temporary until the transaction is committed or rolled back. Other users of the database will not see the changes until they are committed. oci_execute``OCI_NO_AUTO_COMMIT

When inserting or updating data, using transactions is recommended for relational data consistency and for performance reasons.

connection An Oracle connection identifier, returned by , or . oci_connect``oci_pconnect``oci_new_connect

return.success

Voorbeeld: example

<?php

// Insert into several tables, rolling back the changes if an error occurs

$conn = oci_connect('hr', 'welcome', 'localhost/XE');

$stid = oci_parse($conn, "INSERT INTO mysalary (id, name) VALUES (1, 'Chris')");

// The OCI_NO_AUTO_COMMIT flag tells Oracle not to commit the INSERT immediately
$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);  // rollback changes to both tables
    trigger_error(htmlentities($e['message']), E_USER_ERROR);
}

// Commit the changes to both tables
$r = oci_commit($conn);
if (!r) {
    $e = oci_error($conn);
    trigger_error(htmlentities($e['message']), E_USER_ERROR);
}

?>

Voorbeeld: Rolling back to a example

<?php
$stid = oci_parse($conn, 'UPDATE mytab SET id = 1111');
oci_execute($stid, OCI_NO_AUTO_COMMIT);

// Create the savepoint
$stid = oci_parse($conn, 'SAVEPOINT mysavepoint');
oci_execute($stid, OCI_NO_AUTO_COMMIT);

$stid = oci_parse($conn, 'UPDATE mytab SET id = 2222');
oci_execute($stid, OCI_NO_AUTO_COMMIT);

// Use an explicit SQL statement to rollback to the savepoint
$stid = oci_parse($conn, 'ROLLBACK TO SAVEPOINT mysavepoint');
oci_execute($stid, OCI_NO_AUTO_COMMIT);

oci_commit($conn);  // mytab now has id of 1111
?>

Opmerking: > Transactions are automatically rolled back when you close the connection, or when the script ends, whichever is soonest. You need to explicitly call to commit the transaction. oci_commit

Any call to  that uses
 mode explicitly or by
default will commit any previous uncommitted transaction.

oci_execute``OCI_COMMIT_ON_SUCCESS

Any Oracle DDL statement such as 
or  will automatically commit any
uncommitted transaction.

CREATE``DROP

oci_commit``oci_execute