下午好,我在oracle db中有一个存储函数定义:
CREATE OR REPLACE FUNCTION GET_INFO(id IN VARCHAR2,
account IN VARCHAR2,
info out INFO_ITEM)
RETURN NUMBER
AS
rv NUMBER:= 0;
...
我正在尝试使用节点oracledb模块获取返回值和输出值:
const sql = `
DECLARE
info INFO_ITEM;
result NUMBER;
BEGIN
:result := GET_INFO(:id, :account, info);
END;
`;
const params = {
id: '123',
account: '123',
result: { dir: BIND_OUT },
};
const options = {
outFormat: oracledb.OUT_FORMAT_OBJECT,
};
oracleConnection.execute(sql, params, options)
我得到了很好的查询结果({outbinds:{result:1}}),但是在弄清楚如何获得输出值方面有困难。我对pl/sql查询非常陌生,所以如果有人能给我一个关于如何处理这个问题的建议,我将非常感激。
1条答案
按热度按时间gorkyyrv1#
请看节点oracledb示例https://github.com/oracle/node-oracledb/blob/master/examples/plsqlfunc.js 以及https://github.com/oracle/node-oracledb/blob/master/examples/plsqlrecord.js
还要查看node oracledb文档。
首先,需要使用另一个bind变量将函数结果返回给。诀窍是设置类型-我不知道是什么
INFO_ITEM
是。像这样的方法可能有用:注意,医生说:
处理同一类型的多个对象时,请使用完全限定名,如“mdsys.sdo\u geometry”,而不是“sdo\u geometry”。或者,保留并使用connection.getdbobjectclass()返回的原型对象。节点oracledb将使用类型的完全限定名作为键来缓存类型信息,以尽可能避免往返开销。每个连接都有自己的缓存。
另一种方法(实际上可能有性能优势)是返回
info
作为标量绑定值。比如:关于术语,pl/sql块不是查询。查询类似于select语句。