Skip to content

OracleにGoで接続する

   

前の記事でsqlplusで接続できたので、Goのプログラムから接続してみる。

instantclientベースでGoをインストールするDockerfile作成

FROM ghcr.io/oracle/oraclelinux8-instantclient:21

RUN yum install -y wget tar

RUN wget https://go.dev/dl/go1.18.3.linux-amd64.tar.gz

RUN rm -rf /usr/local/go && tar -C /usr/local -xzf go1.18.3.linux-amd64.tar.gz

ENV PATH="${PATH}:/usr/local/go/bin"

CMD [ "go", "version" ]

docker-composeもそれを使うように修正

version: '3'
services:
  db:
    image: container-registry.oracle.com/database/express
    ports:
      - 1521:1521
    environment:
      - ORACLE_PWD=OraclePwd

  cli:
    build: .
    image: oraclegocli
    tty: true
    command: bash

sijms/go-oraのサンプルファイルを拝借。 importの所はv2に修正。

sh-4.4# vi main.go
sh-4.4# go mod tidy
go: finding module for package github.com/sijms/go-ora/v2
go: downloading github.com/sijms/go-ora/v2 v2.4.24
go: found github.com/sijms/go-ora/v2 in github.com/sijms/go-ora/v2 v2.4.24
sh-4.4# go run main.go  oracle://system:OraclePwd@db:1521/XE

Successfully connected.

接続はできているみたいだけど、SQLの実行結果が表示されない。。

ros.Scan(&s)のerrを見たら、カラム数があってない的なエラーだったので、PrerareしてるSQLを*からBANNERに変更。

sh-4.4# go run main.go  oracle://system:OraclePwd@db:1521/XE

Successfully connected.

Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production

できた。