我从 github.com/mattn/go-oci8 切换到库 github.com/sijms/go-ora/v2 go-oci8 没有这样的问题,但还有其他问题。与斑点相同。
我从表中进行选择,结果最多将 32769 个字符插入到数据变量中。如果REPORT_FILE中的数据较小,则没有问题。看来我的代码认为 REPORT_FILE 是一个字符串 =) 也许有人可以告诉我我做错了什么?
Oracle 中的表。REPORT_FILE 存储转换为 base64 的文件:
CREATE TABLE TRANSINV_EX_FILES (
GUID VARCHAR2(50),
REPORT_NAME VARCHAR2(50),
REPORT_FILE BLOB,
RN NUMBER(17,0),
REPORT_FORMAT VARCHAR2(10)
);
我这样连接到数据库:
connString := fmt.Sprintf("oracle://%s:%s@%s:%s/%s", cfg.Username, cfg.Password, cfg.Host, cfg.Port, cfg.DBName)
db, err := sql.Open("oracle", connString)
if err != nil {
return nil, err
}
问题代码:
query := `select tf.report_file, tf.report_name, tf.report_format from TRANSINV_EX_FILES tf where tf.guid = :1`
rows, err := s.db.QueryContext(ctx, query, id)
if err != nil {
return nil, fmt.Errorf("%s: getting additional files cdb: %w", op, err)
}
defer rows.Close()
for rows.Next() {
var (
reportFormat sql.NullString
reportName sql.NullString
data []byte // тут получается 32769, хотя блоб > 50000
)
err := rows.Scan(&data, &reportName, &reportFormat)
if err != nil {
return nil, fmt.Errorf("%s: getting additional files cdb: %w", op, err)
}
}