(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)
oci_commit — 提交未完成的資料庫交易
提交 Oracle 連線
的未完成交易。提交動作會結束目前的交易,並使所有變更永久生效。它會釋放所有持有的鎖定。
當第一個修改資料的 SQL 陳述式使用 oci_execute() 並搭配 OCI_NO_AUTO_COMMIT
旗標執行時,交易便開始。其他陳述式所做的進一步資料更改將成為同一個交易的一部分。在交易中進行的資料更改是暫時的,直到交易被提交或回復為止。其他資料庫使用者在資料更改被提交之前將不會看到這些更改。
當插入或更新資料時,建議使用交易以確保關聯式資料的一致性並提升效能。
範例 #1 oci_commit() 範例
<?php
// 插入多個資料表,如果發生錯誤則回復變更
$conn = oci_connect('hr', 'welcome', 'localhost/XE');
$stid = oci_parse($conn, "INSERT INTO mysalary (id, name) VALUES (1, 'Chris')");
// OCI_NO_AUTO_COMMIT 旗標告訴 Oracle 不要立即提交 INSERT
$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); // 將兩個資料表的變更都回復
trigger_error(htmlentities($e['message']), E_USER_ERROR);
}
// 提交兩個資料表的變更
$r = oci_commit($conn);
if (!$r) {
$e = oci_error($conn);
trigger_error(htmlentities($e['message']), E_USER_ERROR);
}
?>
備註:
當您關閉連線或腳本結束時(以先發生的時間為準),交易會自動回復。您需要明確呼叫 oci_commit() 函式來提交交易。
任何使用
OCI_COMMIT_ON_SUCCESS
模式(顯式或預設)呼叫 oci_execute() 函式都會提交任何先前未提交的交易。任何 Oracle DDL 陳述式(例如
CREATE
或DROP
)都會自動提交任何未提交的交易。