Использование инструкции Commit - PullRequest
0 голосов
/ 14 мая 2018

Как правильно использовать оператор Commit?Нужно ли использовать оператор commit для каждого оператора вставки и каждой функции?Например, если я изменяю таблицу для добавления столбца, должен ли я использовать оператор фиксации?

Ответы [ 4 ]

0 голосов
/ 14 мая 2018

Если вы выполните оператор DDL (CREATE, ALTER, DROP, GRANT и т. Д.), То:

База данных Oracle неявно фиксирует текущую транзакцию до и после каждого оператора DDL.

Если вы выполняете оператор DML (INSERT, UPDATE, DELETE, SELECT, CALL, MERGE), тогда:

Эти операторы неявно фиксируют текущую транзакцию.

и вам нужно будет вручную фиксировать незафиксированные транзакции (но вам не нужно COMMIT после каждого оператора).

Если вы хотите выполнить частичный откат, тогда вы можете использовать SAVEPOINT с.

Не следует помещать операторы COMMIT в функции или процедуры, чтобы можно было использовать несколько функций / процедур в одной транзакции, а затем COMMIT или ROLLBACK всей этой транзакции.

0 голосов
/ 14 мая 2018

попробуй так:

 try {
        // First of all, let's begin a transaction
        $db->beginTransaction();

        // A set of queries; if one fails, an exception should be thrown
        $db->query('first query');
        $db->query('second query');
        $db->query('third query');

        // If we arrive here, it means that no exception was thrown
        // i.e. no query has failed, and we can commit the transaction
        $db->commit();
    } catch (Exception $e) {
        // An exception has been thrown
        // We must rollback the transaction
        $db->rollback();
    }
0 голосов
/ 14 мая 2018

Основываясь на накопленном опыте и «хороших практиках», вы не должны применять в своих функциях / процедурах операторы commit (в большинстве случаев это зависит от задачи, чего вы пытаетесь достичь). Решение "commit" должно лежать на пользователе, который вызывает вашу функцию / процедуры. То, что вы можете реализовать, это «откат», когда возникают / обнаруживаются исключения. Часто, когда хранимые процедуры или функции вызываются из приложения / веб-части, они автоматически фиксируются (эта опция может быть изменена в методах транзакций, насколько я знаю, по крайней мере, в Java).

0 голосов
/ 14 мая 2018

Коммиты необходимы при изменении данных в ваших таблицах (вставка, обновление и удаление).Пока вы не совершите коммит, другие пользователи не увидят измененные данные, и у вас все еще есть возможность отменить изменения, выполнив откат.

Нет необходимости фиксировать после каждого отдельного оператора.

Коммиты не нужны при изменении самой таблицы (изменить таблицу).Фактически, оператор alter table выдает неявную фиксацию.

Еще немного о неявных / явных операторах фиксации в Oracle

...