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

node-oracledb是否支持类似MySQL的单次查询执行多条语句功能?

在Node.js的oracledb驱动中,存在和MySQL类似的单次查询执行多条语句的能力,具体实现方式如下:

实现步骤

1. 开启多语句执行配置

和MySQL的配置逻辑一致,创建连接时设置multipleStatements: true参数即可开启多语句执行能力:

const oracledb = require('oracledb');

let connection;
// 初始化Oracle连接
async function initOracleConn() {
  try {
    connection = await oracledb.getConnection({
      user: 'Oracle用户名',
      password: 'Oracle密码',
      connectString: 'localhost:1521/ORCL', // 替换为你的Oracle连接地址
      multipleStatements: true // 开启单次调用执行多条SQL的能力
    });
  } catch (err) {
    console.error('连接初始化失败:', err);
  }
}

2. 执行多条SQL语句

多条SQL之间用分号分隔即可,和你在MySQL中的使用方式一致,结果会按SQL执行顺序存储在返回值的implicitResults数组中:

app.get('/distinct', async (req, res) => {
  try {
    const result = await connection.execute(`
      SELECT DISTINCT country FROM sample_data.olympic_winners ORDER BY country ASC;
      SELECT DISTINCT sport FROM sample_data.olympic_winners ORDER BY sport ASC
    `);
    // result.implicitResults[0] 对应第一条SQL的查询结果,result.implicitResults[1]对应第二条
    res.send(result.implicitResults);
  } catch (err) {
    console.error('查询失败:', err);
    res.status(500).send('服务内部错误');
  }
});
注意事项
  • 安全风险提示:和MySQL开启多语句执行的风险一致,该配置会大幅提升SQL注入的风险,绝对不要直接拼接用户输入的内容到SQL语句中,所有外部传参必须使用绑定变量传递。
  • 如果不想全局开启多语句执行配置,也可以通过PL/SQL块包裹语句实现相同效果,无需修改连接参数:
const result = await connection.execute(`
  DECLARE
    cur1 SYS_REFCURSOR;
    cur2 SYS_REFCURSOR;
  BEGIN
    OPEN cur1 FOR SELECT DISTINCT country FROM sample_data.olympic_winners ORDER BY country ASC;
    DBMS_SQL.RETURN_RESULT(cur1);
    OPEN cur2 FOR SELECT DISTINCT sport FROM sample_data.olympic_winners ORDER BY sport ASC;
    DBMS_SQL.RETURN_RESULT(cur2);
  END;
`);
// 结果同样存储在result.implicitResults数组中

内容的提问来源于stack exchange,提问作者faisal-akbar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:15:03