首页 > 解决方案 > 从 Oracle DB 加载数据时,列值作为子字符串出现

问题描述

这是我的 Oracle 表:

Table Name: Employee
----------------------
Emp_Id    Emp_Name

12345     Sussane

54321     Alex

以下SELECT查询在 SQL Developer 中得到正确的结果:

SELECT Emp_Id,Emp_Name from Employee;

该查询的结果:

12345     Sussane

54321     Alex

但是当我使用 GoLang 加载此表时,有时(并非总是),我得到如下结果:

运行 1:

1     Sussane

5     Alex

运行 2:

12     Sussane

54     Alex

我的代码:

    rows, dbQueryErr:= db.QueryContext(ctx,"SELECT Emp_Id,Emp_Name from Employee")
    if dbQueryErr != nil{
            return nil,dbQueryErr
    }
    defer rows.Close()
    cols, readColErr := rows.Columns()
    if readColErr!= nil{
            rows.Close()
            return nil,readColErr
    }

    for rows.Next() {

            columns := make([]interface{}, len(cols))
            columnPointers := make([]interface{}, len(cols))
            for i, _ := range columns {
                    columnPointers[i] =&columns[i]
            }

            if err := rows.Scan(columnPointers...); err != nil {
                    logger.Println("Main Data Query Scan Err:", err)
                    return nil, err
            }
            m := make(map[string]interface{})
            for i, colname := range cols {
                    val := columnPointers[i].(*interface{})
                    m[colname] = *val
            }
                            var sKeys string=keyColumns[0]
            mapString := make(map[string]string)
            for key,value := range m{
                    strKey := fmt.Sprintf("%v", key)
                    strValue := fmt.Sprintf("%v", value)
                    mapString[strKey] = strValue
            }
            fmt.Println("m--->", m)
    }

注意:在m--->,我得到不正确的结果。

标签: oraclegosubstring

解决方案


推荐阅读