在我的 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 列数据的记录。我预计它会插入两条记录,但它出现了恐慌
当我传递空时间时,这个问题就解决了。时间类型分配给变量如下:
if colTypes[idx].DatabaseTypeName() == "DATE" {
var val time.Time
values[idx] = val
}
这会在 DATE 数据类型的列中插入(空)