我需要在Linux中使用erlang odbc模块禁用oracle的autocommit。 我创建了与代码的连接:
{ok, Con} = odbc:connect("DSN=MyDSN", [{auto_commit, off}, {scrollable_cursors, off}]).
成功创建了连接。当我尝试更新表时,请求是成功的,但它是自动提交的。我做错了什么?
答案 0 :(得分:3)
好的,伙计们。我自己解决了这个问题。正如我之前在评论中所述,问题是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。
答案 1 :(得分:0)
在ODBC中有SQLSetConnectAttr()函数。它可以用于
SQL_ATTR_AUTOCOMMIT
和SQL_AUTOCOMMIT_OFF
值。但我不知道如何从Erlang中调用它。