oci_rollback
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
oci_rollback
Референца за `function.oci-rollback.php` со подобрена типографија и навигација.
oci_rollback
Класата OCICollection
oci_rollback — Ја враќа тековната трансакција во базата на податоци
= NULL
Ги враќа сите незачувани промени за Oracle
connection и ја завршува трансакцијата. Ги ослободува сите задржани заклучувања. Сите Oracle SAVEPOINTS
се бришат.
Трансакцијата започнува кога првиот SQL исказ што менува податоци се извршува со oci_execute() користејќи го OCI_NO_AUTO_COMMIT знаменце. Понатамошните промени на податоците направени од други искази стануваат дел од истата трансакција. Промените на податоците направени во трансакција се привремени додека трансакцијата не се потврди или поништи. Другите корисници на базата на податоци нема да ги видат промените додека не се потврдат.
При вметнување или ажурирање податоци, се препорачува користење трансакции за конзистентност на релационите податоци и од причини за перформанси.
Параметри
connection-
или со поставување на променливата на oci_connect(), oci_pconnect() or oci_new_connect().
Вратени вредности
Патеката до PHP скриптата што треба да се провери. true на успех или false при неуспех.
Примери
Пример #1 oci_rollback() 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);
}
?>
Пример #2 Враќање на SAVEPOINT 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
?>Белешки
Забелешка:
Трансакциите автоматски се поништуваат кога ќе ја затворите врската или кога ќе заврши скриптата, кое и да е порано. Треба експлицитно да повикате oci_commit() за да ја потврдите трансакцијата.
Секое повикување на oci_execute() што користи
OCI_COMMIT_ON_SUCCESSрежимот експлицитно или по дифолт ќе ја потврди секоја претходна непотврдена трансакција.Секој Oracle DDL исказ како
CREATEorDROPавтоматски ќе ја потврди секоја непотврдена трансакција.
Види Исто така
- oci_commit() - Ја потврдува тековната трансакција во базата на податоци
- oci_execute() е валиден SQL или PL/SQL исказ е да се изврши.