流れ的にね
一連の流れ(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でのクエリーは対応待ちの状態ですね。