Linuxでerlangodbcモジュールを使用して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 以降、問題は実際のものではなく、Oracle で ODBC を使用する必要がある場合は、Erlang/OTP の最新バージョンを試してください。R14B04-R15B02 のパッチは、https://github.com/RubberCthulhu/erlang-odbc-oracle-fix から入手できます。
ODBC にはSQLSetConnectAttr()関数があります。SQL_ATTR_AUTOCOMMIT
と の値で使用でき
SQL_AUTOCOMMIT_OFF
ます。しかし、Erlang から呼び出す方法がわかりません。