2012-10-23 9 views
5

Ich muss Autocommit für Orakel mit erlang ODBC-Modul in Linux deaktivieren. Ich erstellte Verbindung mit Code:erlang odbc: Wie Autocommit für Oracle deaktivieren

{ok, Con} = odbc:connect("DSN=MyDSN", [{auto_commit, off}, {scrollable_cursors, off}]). 

Verbindung wurde erfolgreich erstellt. Wenn ich versuche, eine Tabelle zu aktualisieren, ist die Anfrage erfolgreich, aber sie wird automatisch ausgeführt. Was mache ich falsch?

+0

Es könnte eine Einstellung außerhalb Erlang sein, vielleicht in der Datenbank selbst, die Auto-Commit erzwingt. –

+0

Nein. Mit Oracle SQL Developer mit der gleichen Datenbank muss ich manuell committen. –

+0

Ich denke, vielleicht ist das Problem in ODBC, nicht in erlang selbst –

Antwort

3

Ok, Leute. Ich habe das Problem selbst behoben. Wie ich schon früher in Kommentaren erwähnt habe, ignoriert der Oracle ODBC Treiber für Linux die Einstellung des Autocommit-Modus während der Treiberinitialisierung vor der Verbindungsherstellung. Und nachdem eine Verbindung bereits erstellt wurde, wird der Autocommit-Modus richtig eingestellt.

Ich habe ein Update für C-Quelle für Erlang ODBC-Modul erstellt und jetzt funktioniert es genau richtig. Sie können meine Patches für Erlang OTP hier bekommen - https://github.com/RubberCthulhu/erlang-odbc-oracle-fix.

Update: Die Nachrichten sind verspätet, aber dennoch könnte es nützlich sein, hier zu informieren. Mein Fix für Oracle ODBC wurde in Erlang/OTP aufgenommen. Also seit R16A ist das Problem nicht wirklich und wenn Sie ODBC mit Oracle verwenden müssen, versuchen Sie einfach die neueste Version von Erlang/OTP. Die Patches für R14B04-R15B02 finden Sie hier - https://github.com/RubberCthulhu/erlang-odbc-oracle-fix.

0

In ODBC gibt es SQLSetConnectAttr() Funktion. Es kann mit den Werten SQL_ATTR_AUTOCOMMIT und SQL_AUTOCOMMIT_OFF verwendet werden. Aber ich weiß nicht, wie ich es von Erlang aus nennen soll.

+0

In Erlang ODBC-Modul können Sie den Autocommit-Modus nur einstellen, wenn Sie eine Verbindung herstellen. –

+0

Vielleicht können Sie diese Funktion für Erlang sichtbar machen, indem Sie 'erl_ddll: load_library' mit' odbc32.dll' und den erforderlichen Funktionen (mindestens 'SQLSetConnectAttr()') aufrufen? –

+0

Vielleicht ist es ein Weg. Ich habe festgestellt, dass ein solches Problem mit Oracle ODBC-Treiber für Linux nicht nur mit Erlang erschien. Das Problem ist, dass der Autocommit-Modus erst eingestellt werden kann, nachdem die Verbindung erstellt wurde. Der Erlang-ODBC-Manager gibt den SQL_ATTR_AUTOCOMMIT-Status nach dem Laden des Treibers weiter, aber vor der Verbindung ignoriert der Oracle-ODBC-Treiber möglicherweise den SQL_ATTR_AUTOCOMMIT-Status, wenn er vor der Verbindung vorhanden ist. –

Verwandte Themen