首页 > 解决方案 > node-oracledb 可以调用具有自定义表类型作为参数的 pl/sql 存储过程吗?

问题描述

目前,我正在尝试使用 node-oracledb 调用 PL/SQL 存储过程(具有自定义表类型作为参数)。

PL/SQL 中自定义变量的声明:

TYPE 'ARR_USERNAME' as table of varchar2(32767);

ARR_USERNAME 的参数声明:

username IN arr_username

在这里,我试图调用该过程:

const result = await connection.execute(
  `BEGIN
    PROC_NAME(:var_1, :username, :details);
  END;`, {
    var_1: { type: oracledb.NUMBER, dir: oracledb.BIND_IN, val: 0 },
    username: { type: oracledb.VARCHAR2, dir: oracledb.BIND_IN,
      val: ['node', 'git', 'wow'] },
    details: { type: oracledb.CURSOR, dir: oracledb.BIND_OUT },
  },
);

运行代码后,我得到以下输出:

[Error: ORA-06550: line 2, column 9:
PLS-00306: wrong number or types of arguments in call to 'PROC_NAME'
ORA-06550: line 2, column 9:
PL/SQL: Statement ignored] {
  errorNum: 6550,
  offset: 14
}

上面,我试图传递一个数组,但它不起作用。

我无法更改存储过程。

因此,我必须使用预期的参数类型调用存储过程。

任何帮助表示赞赏。

标签: node.jsstored-proceduresplsqlnode-oracledb

解决方案


推荐阅读