You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PowerShell脚本设置Oracle数据库的Autocommit模式

解决Oracle .NET驱动中SET AUTOCOMMIT语句报错的问题

问题根因

SET AUTOCOMMIT ON/OFF 是SQL*Plus(以及SQL Developer、Toad这类兼容客户端)的客户端命令,并非Oracle数据库支持的标准SQL语句。你用OracleCommand执行它时,数据库服务器无法识别这个命令,所以抛出ORA-00922错误。

正确解决方案

直接操作OracleConnection对象的AutoCommit属性来开启/关闭自动提交,这是Oracle .NET驱动提供的标准方式:

开启自动提交

# 直接设置连接对象的AutoCommit属性为$true
$OracleConnection.AutoCommit = $true

关闭自动提交

$OracleConnection.AutoCommit = $false
# 关闭后需要手动提交或回滚事务
# 提交示例:
# $OracleConnection.Commit()
# 回滚示例:
# $OracleConnection.Rollback()

对比验证

之前你执行删除语句的代码,在AutoCommit开启状态下,执行ExecuteNonQuery()后会自动提交;如果关闭AutoCommit,必须手动调用Commit()才能让修改生效。

比如关闭自动提交后的完整示例:

$SQLDeleteTable = "delete <TABLE_NAME>"
$OracleConnection.AutoCommit = $false
$cmd=[Oracle.ManagedDataAccess.Client.OracleCommand]::new($SQLDeleteTable, $OracleConnection)
$cmd.ExecuteNonQuery() | Out-Null
# 手动提交修改
$OracleConnection.Commit()

补充说明

SQL Developer/Toad能执行SET AUTOCOMMIT是因为这些客户端会把这个命令转换成对连接属性的设置,而不是直接发送给数据库服务器。使用Oracle .NET驱动时,直接操作连接属性才是正确的做法,避免依赖客户端命令的兼容性问题。

内容的提问来源于stack exchange,提问作者user3518483

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 03:22:07