【发布时间】:2018-07-31 16:59:16
【问题描述】:
我正在读取 oracle ref Cursor 并将其存储在 p_ref out 参数中并使用来自resultset.toquerystream() 方法的流我正在读取数据并将数据推送到数组变量中,一旦到达流的末尾,我将发送数据。
它适用于 1000 条记录的小型数据集,但因错误 ERR_EMPTY_RESPONSE 而失败,正如您所见,我将数据存储在数组中并在我们到达结束时返回数据
但它因“ERR_EMPTY_RESPONSE”而失败
oracledb.getConnection(
ds.settings,
function (err, connection) {
if (err) {
cb(err.message, []);
return;
}
let count = 0;
let params = {
p_ref: {type: oracledb.CURSOR, dir: oracledb.BIND_OUT}
};
let cursor = null;
let queryStream = null;
let data = [];
connection.execute(
sql,
params,
{outFormat: oracledb.OBJECT},
function (err, result) {
if (err) {
cb(err.message, []);
doRelease(connection);
return;
}
cursor = result.outBinds.p_ref;
queryStream = cursor.toQueryStream();
queryStream.on('data', function (row) {
count++;
data.push(row);
});
queryStream.on('error', function (err) {
if (!cbCalled) {
cbCalled = true;
cb(err.message);
doRelease(connection);
}
});
queryStream.on('end', function () {
console.log('Rows selected: ' + count);
cb('', data);
doRelease(connection);
});
queryStream.on('close', function () {
if (!cbCalled) {
console.log(count);
doRelease(connection);
}
});
}
);
}
);
参考这里https://github.com/oracle/node-oracledb/blob/master/doc/api.md
var stream = connection.queryStream('SELECT employees_name FROM employees');
stream.on('error', function (error) { // handle any error... });
stream.on('data', function (data) { // handle data row... });
stream.on('end', function () { // release connection... });
stream.on('metadata', function (metadata) { // access metadata of query });
【问题讨论】:
-
旁注:生产节点-oracledb 文档是oracle.github.io/node-oracledb/doc/api.html
标签: loopbackjs strongloop