使用Commit语句

时间:2018-05-14 13:03:21

标签: oracle commit

如何正确使用Commit语句?我是否必须为每个insert语句和每个函数使用commit语句?例如,如果我更改表以添加列,我是否必须使用commit语句?

4 个答案:

答案 0 :(得分:1)

更改表格中的数据(插入,更新和删除)时需要提交。只要您不提交,其他用户就不会看到更改的数据,您仍然可以通过执行回滚来撤消更改。

每个语句后都没有必要提交。

更改表本身(alter table)时不需要提交。实际上,alter table语句发出了一个隐式提交。

Some more on implicit/explicit commit statements in Oracle

答案 1 :(得分:1)

如果你运行DDL statementCREATEALTERDROPGRANT等),那么:

  

Oracle数据库在每个DDL语句之前和之后隐式提交当前事务。

如果您运行DML语句(INSERTUPDATEDELETESELECTCALLMERGE),那么:

  

这些语句不会隐式提交当前事务。

并且您需要手动提交未提交的事务(但在每个语句后都不必COMMIT)。

如果要执行部分回滚,则可以使用SAVEPOINT s。

您不应将COMMIT语句放在函数或过程中,以便您可以在单个事务中使用多个函数/过程,然后COMMITROLLBACK整个事务。

答案 2 :(得分:0)

基于积累的经验和"良好实践" - 你不应该实施" commit"你的函数/程序中的语句(大多数时候,取决于任务,你试图实现什么)。 "提交"决定应该由用户调用你的函数/程序。 当发生/捕获异常时,您可以实现的是" rollback"。 通常,当从应用程序/ Web部件调用存储过程或函数时,它们是自动提交的(可以在事务方法中更改选项,据我所知,至少在java中)。

答案 3 :(得分:-1)

尝试:

 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();
    }