PHP 8.4.6 Released!

oci_rollback

(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)

oci_rollbackReverte a transação pendente do banco de dados

Descrição

oci_rollback(resource $connection): bool

Reverte todas as alterações não confirmadas para a conexão do Oracle definida em connection e encerra a transação. Libera todos os bloqueios mantidos. Todos os SAVEPOINTS do Oracle são apagados.

Uma transação começa quando a primeira instrução SQL que altera os dados é executada com oci_execute() usando a opção OCI_NO_AUTO_COMMIT. Outras alterações nos dados feitas por outras instruções tornam-se parte da mesma transação. As alterações nos 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 o uso de transações para consistência de dados relacionais e por questões de desempenho.

Parâmetros

connection

Um identificador de conexão Oracle, retornado por oci_connect(), oci_pconnect() ou oci_new_connect().

Valor Retornado

Retorna true em caso de sucesso ou false em caso de falha.

Exemplos

Exemplo #1 Exemplo de oci_rollback()

<?php

// Insere 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);
}

?>

Exemplo #2 Exemplo de reversão para um SAVEPOINT

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

// Cria o ponto de salvamento
$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);

// Usa uma instrução SQL explícita para retornar ao ponto de salvamento
$stid = oci_parse($conn, 'ROLLBACK TO SAVEPOINT mysavepoint');
oci_execute($stid, OCI_NO_AUTO_COMMIT);

oci_commit($conn); // mytab agora tem o ID de 1111
?>

Notas

Nota:

As transações são revertidas automaticamente quando a conexão é fechada ou quando o script termina, o que ocorrer primeiro. Deve ser chamada explicitamente a função oci_commit() para confirmar a transação.

Qualquer chamada a oci_execute() que utilize o modo OCI_COMMIT_ON_SUCCESS explicitamente ou por padrão confirmará qualquer transação anterior não confirmada.

Qualquer instrução DDL do Oracle, como CREATE ou DROP, confirmará automaticamente qualquer transação não confirmada.

Veja Também

adicione uma nota

Notas Enviadas por Usuários (em inglês)

Não há notas de usuários para esta página.
To Top