Oracle PL/SQL存储过程默认不自动提交,事务由客户端控制;过程内DML执行后需显式COMMIT或由调用方提交,否则变更挂起、行锁不释放、其他会话不可见;AUTONOMOUS_TRANSACTION是唯一可在过程内独立提交的例外。
Oracle PL/SQL存储过程执行后数据没提交,不是“过程写错了”,而是事务控制机制本身就没触发提交——COMMIT 不在过程里,就不会自动提交。
Oracle 的事务边界由客户端(如 SQL*Plus、PL/SQL Developer、JDBC 连接)控制,不是由存储过程自身决定的。哪怕过程里写了 UPDATE、INSERT,只要没显式调用 COMMIT 或 ROLLBACK,变更就一直挂在当前会话的事务中。
UPDATE 语句生效了,但行锁没释放,其他会话查不到新数据,也改不了同一行AUTONOMOUS_TRANSACTION 是唯一例外:它开启独立事务,需在内部自行 COMMIT,否则照样卡住很多开发者在 PL/SQL Developer 里点“执行”按钮跑过程,看到“已完成”就以为数据落地了——其实那只是过程执行成功,不是事务提交成功。
EXEC my_proc; 后必须跟 COMMIT;
autoCommit = false,调用 CallableStatement.execute() 不等于提交有三种可靠方式,选哪种取决于你的调用上下文:
COMMIT; —— 仅适用于业务逻辑明确要求“执行即固化”的场景;注意:这会让过程失去事务灵活性,无法和外部操作一起回滚COMMIT; —— 最常用,比如:BEGIN my_proc(); END;
/
COMMIT;
AUTONOMOUS_TRANSACTION 封装关键操作(如日志记录),并在其内部 COMMIT; —— 适合审计、通知类旁路操作,不影响主事务最容易被忽略的是:不同客户端对事务边界的处理差异很大,同一个存储过程,在 PL/SQL Developer 里手动点了 Commit,在 Java 应用里却忘了 connection.commit(),结果就是一半数据可见、一半丢失——事务从来不是“过程的事”,而是“谁调用、谁负责收尾”的事。
Tplink企业版路由器WiFi名称的默认设置介绍(Tplink企业版路由器WiFi名称的默认设置是什么)
Tplink路由器灯常亮无法上网的原因分析(如何解决Tplink路由器灯常亮无法上网的问题)
Tplink千兆企业级路由器自动重启的作用和优势介绍(如何设置Tplink千兆企业级路由器自动重启功能)
一根天线的tplink路由器有哪些(一根天线的Tplink路由器的特点和优势介绍)
tplink路由器外网访问不了nas(Tplink路由器外网访问NAS的原因分析)
Tplink无法搜到路由器的原因分析(如何解决Tplink无法搜到路由器的问题)