WindowsでNimからODBC経由でOracleにアクセスする


流れ的にね

一連の流れ(PostgreSQLへのアクセスMySQLへのアクセス)から、最後はこれにアクセスしないとダメでしょということで、Oracleへのアクセスにチャレンジしてみます。
OracleはOracle Clientが用意されているので、ODBC経由で余裕でしょーという予想です。

Oracle Instant Clientのダウンロード

必要なものは2つ

  • Basic Package
  • ODBC Package

ODBCの設定方法

ここが一番の山場でした。

こちら をご参考に。
もあります。

接続テスト

設定情報はあくまでサンプルです。

tnsnames.ora
oradb =
(DESCRIPTION =
 (ADDRESS_LIST =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
 )
 (CONNECT_DATA =
 (SERVICE_NAME = xe)
 )
)

import db_odbc

const datasource = "oracle_datasource"
const user_name = "user"
const password  = "password"
const database  = ""

block:
  var db = open(datasource,user_name,password,database)
  echo "opened"
  defer:
    db.close()
    echo "closed"
  for x in db.fastRows(sql"SELECT 'hello world' from dual"):
    echo x
opened
@["hello world"]
closed

まとめ的な何か

Windows版のOracle ClientのダウンロードからのODBC データソース アドミニストレーターの設定をするまで、全行程の9割ほどかかりました。

トラップの皆さん

  • odbc_install.exeを起動するとなぜか消えるDLLファイル
  • 環境変数 NLS_LANGの設定間違い
  • 環境変数 TNS_ADMINのパス指定間違い
  • tnsnames.oraのフォーマット

接続できたものの・・・

今回用意した接続確認用のOracleですが、ShiftJISでのインストールになっていたようで、日本語が入ったテーブルをSELECTすると、正しくエンコードされていないデータが表示されました。

もともとdb_odbcモジュールにも、Currently all queries are ANSI calls, not Unicode.と記述されているので、Unicodeでのクエリーは対応待ちの状態ですね。