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

使用TS+node-oracledb调用Oracle存储过程报ORA-01008错误如何解决

错误原因与修复方案

ORA-01008错误的核心是PL/SQL语句中声明的所有绑定变量没有全部完成绑定,你的代码存在以下问题:
你在PL/SQL块中定义了输出绑定变量:result用来接收存储函数返回的SYS_REFCURSOR,但入参绑定对象中完全没有定义这个变量的绑定规则,这是触发报错的直接原因。同时node-oracledb中绑定REF CURSOR类型需要显式指定类型和输出方向。

修复后的Repository层代码

public async bipagem(
    p_fil_filial: string,
    p_set_cdgo: string,
    p_mini_fab: string,
    p_codigo_barra: string,
    userPool: string
  ) {
    let conn;
    try {
      conn = await connection(userPool);
      const resultado = await conn.execute(
        `DECLARE
            result SYS_REFCURSOR;
           BEGIN
          -- Call the function
            :result := brio.pck_fab0024.bipagem(p_fil_filial => :p_fil_filial,
            p_set_cdgo => :p_set_cdgo,
            p_mini_fab => :p_mini_fab,
            p_codigo_barra => :p_codigo_barra,
            p_msg => :p_msg);
          END;`,
        {
          p_fil_filial,
          p_set_cdgo,
          p_mini_fab,
          p_codigo_barra,
          p_msg: { type: oracledb.STRING, dir: oracledb.BIND_OUT },
          // 新增result变量的绑定配置
          result: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT }
        }
      );
      // 如需读取游标内数据可参考以下逻辑
      const resultCursor = resultado.outBinds.result;
      const rows = await resultCursor.getRows(100); // 100为单次读取行数,可按需调整
      // 处理完数据后关闭游标
      await resultCursor.close();
      return resultado;
    } catch (erro) {
      console.log(erro);
    } finally {
      if (conn) conn.close();
    }
  }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:36:01