11
10

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 5 years have passed since last update.

Go言語でOracleに接続する(Windows)

Posted at

Go言語でOracleに接続する方法です。

以下のLinux版の記事を参考に、Windows7でアクセスできることを確認しました。

go-oci8のセットアップ手順(Linux)

上記記事と同じく、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のバージョンに合わせてダウンロードします。

Instant Client Downloads

以下がダウンロードした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」ファイルを作成します。

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
glide.yaml
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)
}
11
10
2

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
11
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?