我有这个Oracle存储过程:
PROCEDURE STORED_TEST(
PARAM_1 IN NVARCHAR2
REF_CURSOR OUT SYS_REFCURSOR,
MESSAGE OUT VARCHAR2
);
字符串
我用TypeORM从node(TypeScript)应用程序调用它:
进口:
import { dataSource } from '../utils/database';
const oracledb = require('oracledb');
型
电话:
const sql = 'BEGIN PKG_TEST.STORED_TEST(:PARAM_1, :REF_CURSOR, :MESSAGE); END;';
const result = await dataSource.query(
sql, [
{ val: param1, dir: oracledb.BIND_IN, type: oracledb.VARCHAR },
{ dir: oracledb.BIND_OUT, type: oracledb.CURSOR },
{ dir: oracledb.BIND_OUT, type: oracledb.VARCHAR }]
);
console.log("result:", result);
型
我在console中得到了这个结果:
result: [
ResultSet {
_rowCache: [],
_processingStarted: false,
_convertedToStream: false,
_allowGetRowCall: false,
_parentObj: Connection {
_events: [Object: null prototype],
_eventsCount: 1,
_maxListeners: undefined,
_dbObjectClasses: {},
_pool: [Pool],
_newSession: false,
[Symbol(kCapture)]: false
}
},
'OK'
]
型
如何检索此游标的行?
1条答案
按热度按时间ht4b089n1#
看起来你正在打印的内容中已经有两个OUT绑定变量:REF CURSOR已作为ResultSet(结果数组中的第一个值)返回,OUT绑定消息为“OK”。
要从ResultSet获取数据,请参阅GitHub上的examples/refcursor.js。
在您的情况下,尝试类似于:
字符串
如果行数很大,你可能需要循环
getRows()
:请参阅GitHub中的示例。