Go言語でOracleに接続する方法です。
以下のLinux版の記事を参考に、Windows7でアクセスできることを確認しました。
上記記事と同じく、mattnさんのgo-oci8パッケージを使用しています。
前提条件
- Go言語がインストールされていること
- SQL*Plusクライアントがインストールされていること
WindowsでもLinuxと同じくOracle Databseはインストールされていなくても大丈夫です。
私の環境は、Goのバージョンは1.7.4、SQL*Plusのバージョンは11.2.0.1.0でした。
Instant Clientのダウンロード
以下のサイトから、SQL*Plusのバージョンに合わせてダウンロードします。
以下がダウンロードしたzip。
- instantclient-basic-nt-11.2.0.4.0.zip
- instantclient-sqlplus-nt-11.2.0.4.0.zip
- instantclient-sdk-nt-11.2.0.4.0.zip
展開して、instantclient_11_2ディレクトリにまとめます。
ディレクトリの場所は任意ですが、私はC:\appの下に配置しました。
pkg-configのインストール
pkg-config.exeが必要なのですが、MinGWというツールセットに入っているので、これをインストールします。
以下の記事を参考に、環境変数の設定までを行います。
MinGW(gcc) の Windows へのインストールと使い方
私の場合はC:\MinGW\binの中にpkg-config.exeが入っている状態です。
oci8.pcファイルの作成
こちらも配置は任意ですが、以下のディレクトリを作成したと仮定して進めます。
C:\app\instantclient_11_2\pkgconfig
上記ディレクトリに「oci8.pc」ファイルを作成します。
prefix=C:/app/instantclient_11_2
exec_prefix=${prefix}
libdir=${prefix}
includedir=${prefix}/sdk/include
oralib=${prefix}
orainclude=${prefix}/sdk/include
glib_genmarshal=glib-genmarshal
gobject_query=gobject-query
glib_mkenums=glib-mkenums
Name: oci8
Description: oci8 library
Version: 11.2
Libs: -L${libdir} -loci
Libs.private:
Cflags: -I${includedir}
環境変数の追加
以下の環境変数を追加します。
変数名:PKG_CONFIG_PATH
変数値:C:\app\instantclient_11_2\pkgconfig
go-oci8の取得
go get または glide で入手します。
go get github.com/mattn/go-oci8
package: .
import:
- package: github.com/mattn/go-oci8
Goの実装
// 以下のように接続して
connectStr := "{Oracle User}/{Oracle Password}@{IP}:{Port}/{SID}"
db, err := sql.Open("oci8", connectStr)
if err != nil {
fmt.Printf("DbOpen Error: %s", err)
return
}
defer db.Close()
// 以下のようにクエリ投げる
rows, err := db.Query("SELECT ID, NAME FROM HOGE_TBL")
if err != nil {
fmt.Printf("Query Error: %s", err)
return juchuViews, err
}
defer rows.Close()
// 以下のようにデータを取得する
for rows.Next() {
var id int
var name string
rows.Scan(&id, &name)
fmt.Println(id)
fmt.Println(name)
}