使用 Oracle 程序 - Node.js Knex.js

Posted

技术标签:

【中文标题】使用 Oracle 程序 - Node.js Knex.js【英文标题】:Consume Oracle Procedure - Node.js Knex.js 【发布时间】:2021-08-03 15:35:11 【问题描述】:

早安各位!一切顺利吗?

我在开发将使用 Oracle 数据库中的某些信息的 API 时遇到问题。 我使用 Knex.js 查询构建器在 Node.js 中开发了 API 框架。我直接在后端开发了这个对数据库的查询,运行后我设置了可以直接在数据库中进行这个查询的过程。

但是我不能从后端使用这个过程到 PLSQL。在 Knex 文档中没有关于使用存储过程的信息。搜索论坛我看到一些开发人员使用 knex.query 或 knex.execute 执行一个 Begin 然后通过参数使用该过程。但是当我尝试以这种方式运行时,我收到一条错误消息,提示 knex.query 或 knex.execute 不是函数。

我认识的人可以告诉我出了什么问题吗?或者有没有其他方法可以在本地(不使用框架)进行这种消费,或者是否有更好的框架为这种类型的执行做好准备?

 const data = await connection.execute(
            `
            BEGIN
                SP_GUIA_PROCEDURE(P_NUMB_GUIA => 000254, P_NUMB_BENEF => '000025448911000');
            END;
            `
        );

**TypeError: connection.execute is not a function**

非常感谢您。

【问题讨论】:

AFAIK knex 目前至少在使用 OUT 绑定的情况下不支持它。见讨论:github.com/knex/knex/issues/1901 和 github.com/knex/knex/issues/2990 【参考方案1】:

您似乎正在使用 Knex 获取连接。 Knex 中没有名为 execute() 的方法。您可以使用 connection.raw() 调用存储过程。使用绑定作为过程的参数也是一个很好的做法。以下是可以提供帮助的示例代码(带有绑定):

const data = await connection.raw(
      `BEGIN
         SAMPLE_PROCEDURE(:id,:name, :oval);
       END;`,
      
        id: 11, // Bind type is determined from the data.  Default direction is BIND_IN
        name: val: 'James', dir: oracledb.BIND_INOUT,
        oval: type: oracledb.NUMBER, dir: oracledb.BIND_OUT
      
    );

SAMPLE_PROCEDURE 是存储过程,result 是一个包含 outbinds 的数组。

【讨论】:

以上是关于使用 Oracle 程序 - Node.js Knex.js的主要内容,如果未能解决你的问题,请参考以下文章

node.js / oracledb驱动程序限制

如何使用 Node.js 将多条记录插入 Oracle DB

Oracle 搭建Node.js开发环境

如何在不使用 Visual Studio 作为先决条件的情况下使用 node js javascript 连接到 oracle 数据库

将js进行到底:node学习8

使用 Angular.js 和 Node.js 构建实时应用程序的更好方法是啥?