我需要在 Linux 中使用 erlang odbc 模块禁用 oracle 的自动提交。我创建了与代码的连接:
{ok, Con} = odbc:connect("DSN=MyDSN", [{auto_commit, off}, {scrollable_cursors, off}]).
连接已成功创建。当我尝试更新表时,请求成功,但它是自动提交的。我究竟做错了什么?
好,朋友们。我自己解决了这个问题。正如我之前在评论中所说,问题是用于 Linux 的 Oracle ODBC 驱动程序在创建连接之前的驱动程序初始化期间忽略了设置自动提交模式。并且在已经创建连接之后,自动提交模式被正确设置。
我为 erlang odbc 模块的 C 源代码创建了一个修复程序,现在它可以正常工作了。你可以在这里获取我的 Erlang OTP 补丁 - https://github.com/RubberCthulhu/erlang-odbc-oracle-fix。
更新:这个消息来晚了,但在这里通知它可能是有用的。我对 Oracle ODBC 的修复已包含在 Erlang/OTP 中。因此,自从 R16A 以来,问题并不实际,如果您需要将 ODBC 与 Oracle 一起使用,只需尝试最新版本的 Erlang/OTP。R14B04-R15B02 的补丁可在此处获取 - https://github.com/RubberCthulhu/erlang-odbc-oracle-fix。
在 ODBC 中有SQLSetConnectAttr()函数。它可以与
SQL_ATTR_AUTOCOMMIT
和SQL_AUTOCOMMIT_OFF
值一起使用。但我不知道如何从 Erlang 调用它。