gpt4 book ai didi

oracle - 如何在 Go 语言中从 Oracle(长原始格式)读取图像

转载 作者:数据小太阳 更新时间:2023-10-29 03:23:17 28 4
gpt4 key购买 nike

我正在尝试使用 Golang 代码从外部 Oracle 数据库读取图像(长原始数据类型)。

当调用 sql 的 row.Next() 时出现以下错误:ORA-01406: 获取的列值被截断

row.Next 可以很好地从 mssql 数据库中读取 blob 图像。

示例代码:

db, err := sql.Open("oci8", getDSN()) //function to get connection details 
if err != nil {
fmt.Println(err)
return
}
defer db.Close()
rows, err := db.Query("SELECT image FROM sysadm.all_images")
if err != nil {
fmt.Println(err)
return
}
defer rows.Close()
for rows.Next() {
var id string
var data []byte
rows.Scan(&id, &data)
}
fmt.Println("Total errors", rows.Err())
}

我希望有人能帮我解决这个问题或查明问题所在。

最佳答案

我假设您使用 go-oci8 作为驱动程序。

基于这个 issue https://github.com/mattn/go-oci8/pull/71 有人得到了和你一样的错误,然后通过修改驱动程序上的一些代码设法修复它。

根据这个 commit ,问题已经通过增加文件 $GOPATH/src/github.com/mattn/go-oci8 上的 oci8cols[i].size 的值来解决/oci8.go。我认为在您的情况下,您有更大的 blob 数据,这就是修订仍然无效的原因。

case C.SQLT_NUM:
oci8cols[i].kind = C.SQLT_CHR
oci8cols[i].size = int(lp * 4) // <==== THIS VALUE
oci8cols[i].pbuf = C.malloc(C.size_t(oci8cols[i].size) + 1)

因此,尝试增加乘数,例如:

oci8cols[i].size = int(lp * 12) // <==== OR GREATER

关于oracle - 如何在 Go 语言中从 Oracle(长原始格式)读取图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49267194/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com