【问题标题】:Is commit required in an Oracle stored procedure which is called from Java class?从 Java 类调用的 Oracle 存储过程中是否需要提交?
【发布时间】:2020-01-26 07:44:39
【问题描述】:

我有一个 Oracle 存储过程,它在数据库中的表上执行一些插入和更新。 过程结束时没有明确的 Commit 或 Rollback 语句。 但是,当我通过 java 类调用此 SP 时,我看到插入和更新已提交到数据库中。

那么任何人都可以帮助我了解我们是否真的需要在 Oracle 中的存储过程结束时使用提交语句?

【问题讨论】:

标签: oracle stored-procedures


【解决方案1】:

我不是 java 经验,但据我所知,当您关闭数据库连接时,数据会被提交(除非您回滚它们)。现在回到您的问题是何时使用 SP 中的提交。

当您在表的过程中使用 DML(insert,update,delete) 操作时,该表将为 Locked 因此,如果任何其他用户尝试访问锁定的表,它必须等到您提交/回滚你的操作。因此,如果您的过程需要时间,由于循环较长或优化查询不佳,那么用户将被阻止。因此,如果您在 DMl 之前进行了提交,则不会发生任何阻塞。

其他原因是撤消表空间,所有未提交的数据将在那里等待直到您提交它们,因此,例如,如果您插入大量数据(数百万),您的撤消可能会根据您的大小而被填满,您会得到一个错误。

如此简短的回答,如果您的程序在大表上没有很多操作并且速度很快,那么您可以通过提交,否则最好添加提交。

【讨论】:

    猜你喜欢
    • 2012-01-27
    • 1970-01-01
    • 2013-12-04
    • 2019-01-13
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    相关资源
    最近更新 更多