You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Node.js的oracledb(5.5.0)中按列名访问查询结果字段?

问题:OracleDB(5.5.0)查询结果能否按列名访问?

我正在使用oracledb(5.5.0)。执行SELECT语句时,目前只能通过列索引访问查询结果,但想知道是否可以按列名访问。我的代码如下:

const oracledb = require('oracledb');
...

//do a simple select statement
select = async(query, params) => {
    console.log("Selecting (5468468466)... ");         
       
    let conn;
    try{
        conn = await this.getDatabaseConnectionOracle();

        const result  = await conn.execute(query, params);

        console.log("result: ");
        console.log(result);

        let rows = result.rows;
        rows.forEach( (row) => {
            console.log(`Lowercase: ${row.fullname} `);
            console.log(`Uppercase: ${row.FULLNAME} `);  
            console.log(`row[0]: ${row[0]} `);  

          });
        return result.rows;
    } catch (error) {
        console.error('Error in oracle.select(): ' , error);
    } finally {
        if (conn) {
            await conn.close();
          }

    }

}

输出结果:

Selecting (5468468466)...

result: 
{
  metaData: [
    { name: 'USERID' },
    { name: 'FULLNAME' }
  ],
  rows: [
    [
      '123456789',
    'My Full Name'
    ]
  ]
}

Lowercase: undefined
Uppercase: undefined
row[0]: 123456789

解决方案

可以按列名访问查询结果,默认情况下oracledb返回数组形式的行数据,只需配置outFormat参数,让结果以对象形式返回,就能通过列名(对应metaData里的name字段)访问。

有两种配置方式:

1. 单次查询配置

在conn.execute方法中添加第三个参数,指定outFormat为oracledb.OUT_FORMAT_OBJECT:

const result = await conn.execute(query, params, { outFormat: oracledb.OUT_FORMAT_OBJECT });

修改后,result.rows里的每一行会变成对象:

{ USERID: '123456789', FULLNAME: 'My Full Name' }

此时就能通过row.FULLNAME或row.USERID访问对应列的值。

2. 全局/连接级配置

如果希望所有查询默认返回对象形式,可在初始化时全局配置,或在获取连接后单独设置:

// 全局配置(初始化阶段设置)
oracledb.outFormat = oracledb.OUT_FORMAT_OBJECT;

// 或针对当前连接设置
conn.outFormat = oracledb.OUT_FORMAT_OBJECT;

注意:Oracle默认会将未加双引号的列名转为大写,所以返回的对象属性名是大写形式(比如FULLNAME),这也是你之前用row.fullname得到undefined的原因。如果需要小写属性名,可在查询时给列名加别名:

SELECT USERID AS userid, FULLNAME AS fullname FROM your_table

这样返回的对象属性就是userid和fullname,可直接用row.userid访问。

内容的提问来源于stack exchange,提问作者NL3294

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 01:50:25