oracle - 每次 EXECUTE IMMEDIATE 后都需要 COMMIT 吗?

标签 oracle stored-procedures oracle11g sp-executesql executequery

我在一个 oracle 过程中有多个 EXECUTE IMMEDIATE 命令。

EXECUTE IMMEDIATE 'DELETE  FROM tbl1'; 
EXECUTE IMMEDIATE 'INSERT INTO tbl1...'; 
COMMIT;
EXECUTE IMMEDIATE 'DELETE  FROM tbl3'; 
EXECUTE IMMEDIATE 'INSERT INTO tbl3 ...'; 
COMMIT;
EXECUTE IMMEDIATE 'DELETE  FROM tbl4'; 
EXECUTE IMMEDIATE 'INSERT INTO tbl4 ...';
COMMIT; 

我是否需要所有这些 COMMIT,或者只是在程序结束时?

最佳答案

除了在业务交易结束时,您真正被迫提交的唯一时间是:

  • 执行 DDL 时:DDL 执行包含在一对隐式提交中。
  • 直接路径插入后:在提交插入之前无法读取表。

  • 正如horsey 评论的那样,正确的提交点是业务事务完成时。否则,您需要自己编写一些代码来检测和修复已离开数据库的部分完成和提交的事务是逻辑上不一致的状态(例如,存在 INVOICE 记录而没有任何 INVOICE_DETAIL 记录)。

    关于oracle - 每次 EXECUTE IMMEDIATE 后都需要 COMMIT 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20433082/

    相关文章:

    plsql - 用于测试字符串是否为数字的简单 PL/SQL 函数

    oracle - 杀死 Oracle 作业。 10g专用

    SQL 使用 OBJECT 作为 ORDER 方法的参数

    oracle - 识别和解决 Oracle ITL 死锁

    java - 使用 JPA 从存储过程中获取 select 语句结果?

    sql - 在 Select 语句中使用存储过程的结果

    sql - DBMS 中的外部过程

    sql - 错误显示时首先显示错误消息,然后返回(MS Sql Server)

    sql - 通过与区域表连接从 Loc_hist 表中获取每个分区的记录

    php - 在控制台中出现错误:加载资源失败:net::ERR_CONNECTION_RESET