3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

NimAdvent Calendar 2020

Day 15

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

Last updated at Posted at 2020-12-14

流れ的にね

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

Oracle Instant Clientのダウンロード

image.png

必要なものは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)
 )
)

image.png

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でのクエリーは対応待ちの状態ですね。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?