Golang godror.批量插入空值问题

问题描述 投票:0回答:1

在我的 golang 程序中,我尝试插入具有 DATE 类型列之一的 Oracle 表。 我正在使用 godror 库并使用 godror.Batch 插入数据,如果我有两条记录,一条具有日期值,另一条具有 DATE 空值。 我收到错误 Reflect.Type is nil, not *reflect.rtype

为了解决这个问题,我尝试执行以下操作:

// values is type []interface{} and contains the data to be inserted
for idx := range values {
            fmt.Println(idx, colTypes[idx].DatabaseTypeName(), values[idx])
            switch values[idx].(type) {
            case nil:
                if colTypes[idx].DatabaseTypeName() == "LONG RAW" {
                    values[idx] = []byte{} //For null BLOB data: gives panic in godror.batch.Add()
                } else if colTypes[idx].DatabaseTypeName() == "DATE" {
                    values[idx] = sql.NullTime{}
                } else {
                    values[idx] = ""
                }
            }
        }
        err = batchAdd.Add(ctx, values...)
        if err != nil {
            trx.Rollback()
            return err
        }

这解决了 Varchar 类型列的问题,但对于 Date 我收到错误: 恐慌:reflect.Set:类型 time.Time 的值不可分配给类型 sql.NullTime

我想将 null 插入到 Date 列中,但由于上一条记录包含 time.Time 类型,而其他记录包含 null,所以出现上述错误。

仅使用 godror.Batch 是否有任何解决方法,或者我做错了什么。

Go版本:go版本go1.20.6 linux/amd64 甲骨文:甲骨文19c

我尝试使用 godror.Batch 插入一条包含空数据的记录和一条包含 DATE 列数据的记录。我预计它会插入两条记录,但它出现了恐慌

oracle go bulkinsert
1个回答
0
投票

当我传递空时间时,这个问题就解决了。时间类型分配给变量如下:

if colTypes[idx].DatabaseTypeName() == "DATE" {
    var val time.Time
    values[idx] = val
}

这会在 DATE 数据类型的列中插入(空)

© www.soinside.com 2019 - 2024. All rights reserved.