哪种语言 连接 oracle,Go语言连接Oracle(就我这个最全)

综合参考了网上挺多的方案

倒腾了半天终于连接好了

Go都出来这么多年了

还没有个Oracle的官方驱动。。。

过程真的很蛋疼。。一度想放弃直接连ODBC

首先交代一下运行环境和工具版本:

WIN10

MINGW64

ORACLE INSTANCCLIENT_18_3   x64

Jetbrins Goland

看完这篇文章,你可以解决如下问题(正经的解决):

编译阶段:

1. exec: "gcc": executable file not found in %PATH%

2. exec: "pkg-config": executable file not found in %PATH%

3. cannot use (**_Ctype_struct_OCIServer)(unsafe.Pointer(&conn.svc))

(type **_Ctype_struct_OCIServer) as type **_Ctype_struct_OCISvcCtx

in argument to func literal

运行阶段:

1. Process finished with exit code -1073741701 (0xC000007B)

2. exit status 3221225595

开始

一、下载ORACLE INSTANCCLIENT 和对应的SDK

下载地址:https://www.oracle.com/technetwork/topics/winx64soft-089540.html

我选用了18.3 x64的版本,能向下兼容,不用担心

注意basic版本和sdk都需要下载下来,一共是两个文件

9ad1e29e1b2e91e4805d2fbdc0a3be82.png

下载之后先解压basic压缩包,然后将sdk解压到basic目录下:

3eb076faebd46dfdd9675d38d5d1bd24.png

添加如下环境变量到系统PATH变量:(按自己的情况添加)

9bbdb95bed384f7c98fcb62e2ee44c95.png

二、下载安装MINGW64

主要是解决WIN中没有GCC的问题

如果不安装后期会出现问题:(exec: "gcc": executable file not found in %PATH%)

因为之前下载的ORACLE INSTANCCLIENT是64位的所以我们也需要下载MINGW64才能编译

下载地址:https://sourceforge.net/projects/mingw-w64/files/

注意,第一个是在线安装程序,较慢,建议直接下载7z压缩包。解压即可

689b781664a0194656b15ab91218d216.png

解压之后,添加如下环境变量到PATH:(按自己的情况添加)

6905f42efbdf7355f484d46a63680ae1.png

三、获取GO-OCI8驱动

执行命令:go get github.com/wendal/go-oci8

会报一个错误:pkg-config: exec: "pkg-config": executable file not found in %PATH%

先忽略,后面会解决

四、修改OCI8.PC

进入GOPATH目录,找到OCI8.PC文件,打开,修改 红色框的部分(按你自己的情况)

%GoPath%\src\github.com\wendal\go-oci8\windows

83ba500e49e3e480ec62ce5830bc8200.png

然后:

1.复制此目录下pkg-config.exe到mingw64下的bin目录

ce58ed3f45299b8b09dc368ff49956da.png

2.复制此目录下oci8.pc到mingw64下的lib/pkg-config目录(pkg-config目录需要自己建)

99a0c70630660acadf84c3e7198c5241.png

添加如下(PKG_CONFIG_PATH)环境变量:(按自己情况)

bb357e4e703be056fb0645da7d3c09d3.png

五、最后一步

执行命令:go get github.com/wendal/go-oci8

此时执行这个操作

应该已经没有(pkg-config: exec: "pkg-config": executable file not found in %PATH%)这个错误了,如果还有,就是上一步你做的不太对。

但是,还会有新的错误出现,如下:

44954088401391a524a8620c553ac81f.png

不要慌

打开GOPATH目录下,oci8.go文件

路径:%GoPath%\src\github.com\wendal\go-oci8

此文件中四处OCIServer为OCISvcCtx

c1de4141325aeed8b6a12b57dcad6d52.png

再次!!!!

执行命令:go get github.com/wendal/go-oci8

可以了,完事儿。

让我们上一段代码,测试一下:

package mainimport ("database/sql"

"fmt"

"log"

"os"_"github.com/wendal/go-oci8")

func query() {

os.Setenv("NLS_LANG", "AMERICAN_AMERICA.AL32UTF8")

log.SetFlags(log.Lshortfile|log.LstdFlags)

db, err := sql.Open("oci8", "j1_bibox/oracle123@10.1.196.200:1521/zjdevdb")if err !=nil {

log.Fatal(err)

}

defer db.Close()

rows, err := db.Query("select * from v$version")if err !=nil {

log.Fatal(err)

}

cols, _ :=rows.Columns()

rawResult := make([][]byte, len(cols))

result := make([]string, len(cols))

dest := make([]interface{}, len(cols))for i :=range rawResult {

dest[i]= &rawResult[i]

}forrows.Next() {

err=rows.Scan(dest...)for i, raw :=range rawResult {if raw ==nil {

result[i]= ""}else{

result[i]= string(raw)

}

}

fmt.Printf("%s\n", result[0])

}

rows.Close()

}

func main() {

query()

}

走你

就是这么刺激,还是错!!!!?????

现在不要慌,冷静一点,分析情况

首先,如果你的代码在IDE中运行,会报错如下:

bfae0741b72ac5692f480a6014f17e73.png

e015759c00ef78cb41b4167030d5c444.png

如果你不信这个邪,在cmd中运行,会报错如下:

900418effe7adbb7e3d736b4646007df.png

然后你拿着报错信息,去找度娘,有人会告诉你,你的instanceclient版本不对,然后你就不停的换版本,换版本,换版本

然后发现卵用没有

对,那个人就是我,=_=???????

现在!!我现在!!告诉你!!

真相只有一个!!!!!!!!

那就是:以管理员模式运行

96ef23e3b4935d11eb5ba0e355390f58.png

来到这,无数次失败,无数次尝试最后获得成功的激动,瞬间就把你点燃。

恐怕这就是计算机世界吸引我的地方吧。

IDE中也可以这样解决问题:

0d8677bc32ec17e683ec1f79a70f3c50.png

最后的最后,让我们给这段代码加个注释:

de0d0dc3a52059ea2717ed1901afad54.png

最后的最后的最后,如有指教,请留言。

原文出处:https://www.cnblogs.com/jiangyuqin/p/10135963.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值