(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)
oci_commit — Confirma a transação de banco de dados pendente
Confirma a transação pendente para a conexção
Oracle informada em connection
. Uma confirmação encerra a
transação atual e torna permanentes todas as alterações. Ela libera
todos os bloqueios mantidos.
Uma transação começa quando a primeira instrução SQL que altera os dados
é executada com oci_execute() usando
o sinalizador OCI_NO_AUTO_COMMIT
. Outras alterações de dados
feitas por outras instruções se tornam parte da mesma
transação. As alterações de dados feitas em uma transação são temporárias
até que a transação seja confirmada ou revertida. Outros usuários
do banco de dados não verão as alterações até que sejam confirmadas.
Ao inserir ou atualizar dados, é recomendado usar transações para consistência de dados relacionais e por motivos de desempenho.
connection
Um identificador de conexão Oracle, retornado por oci_connect(), oci_pconnect() ou oci_new_connect().
Exemplo #1 Exemplo de oci_commit()
<?php
// Inserindo em várias tabelas, revertendo as alterações se ocorrer um erro
$conn = oci_connect('hr', 'welcome', 'localhost/XE');
$stid = oci_parse($conn, "INSERT INTO mysalary (id, name) VALUES (1, 'Chris')");
// O sinalizador OCI_NO_AUTO_COMMIT informa ao Oracle para não confirmar o INSERT imediatamente
$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); // reverte alterações em ambas as tabelas
trigger_error(htmlentities($e['message']), E_USER_ERROR);
}
// Confirma as alterações em ambas as tabelas
$r = oci_commit($conn);
if (!$r) {
$e = oci_error($conn);
trigger_error(htmlentities($e['message']), E_USER_ERROR);
}
?>
Nota:
As transações são automaticamente revertidas quando você fecha a conexão, ou quando o script termina, o que ocorrer primeiro. Você precisa chamar explicitamente oci_commit() para confirmar a transação.
Qualquer chamada para oci_execute() que use o modo
OCI_COMMIT_ON_SUCCESS
explicitamente ou por padrão confirmará qualquer transação anterior não confirmada.Qualquer instrução Oracle DDL como
CREATE
ouDROP
confirmará automaticamente qualquer transação não confirmada.