【发布时间】:2021-04-01 11:10:07
【问题描述】:
我以用户 AN 登录并在 sql developer 中创建了一个过程:
CREATE OR REPLACE PROCEDURE **viewSystemUsers**
AS
sysRefCursor SYS_REFCURSOR;
BEGIN
OPEN sysRefCursor
FOR
SELECT USERNAME, USER_ID, PASSWORD FROM dba_users;
dbms_sql.return_result(sysRefCursor);
END;
并且执行了它,这工作正常。之后,我使用 node-oracledb成功连接为同一用户:
oracle.getConnection(
{
user : "AN",
password: "AN123",
connectString: "localhost:1521/orcl"
},
(error, **connection**) => {
if(error){
console.error(error.message);
return;
}
else
console.log('connect sucessfully!');
但是当我设置 EXECUTE 查询时:
**connection**.execute(
`execute **viewSystemUsers**;`,
(err, result) => {
if(err){
console.error(err);
return;
}
console.log(result);
我收到 [Error: ORA-00900: invalid SQL statement] { errorNum: 900, offset: 0 }。 谁能帮我解决它?非常感谢。
【问题讨论】:
-
node-oracledb 是否支持
dbms_sql.return_result?如果没有,那么您可能需要在过程中使用OUT参数(这是实现相同结果的典型方法)。 -
@MT0 你的意思是使用 sys_refcursor 变量作为输出参数,调用 proc 打印该变量?
-
使用
SYS_REFCURSOR变量作为OUT参数,调用过程,然后循环遍历变量得到结果集。 -
@M10,node-oracledb 是否支持 dbms_ouput.putline()?如果没有,如何从循环中获取数据?
-
类似这样的东西:blogs.oracle.com/opal/…
标签: oracle plsql node-oracledb