使用 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 将多条记录插入 Oracle DB
如何在不使用 Visual Studio 作为先决条件的情况下使用 node js javascript 连接到 oracle 数据库