为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: DM8
【操作系统】:WINDOWS11
【CPU】:13th Gen Intel(R) Core(TM) i9-13900H 2.60 GHz
【问题描述】*:
import dmdb from 'dmdb'
const reqFunc = async () => {
try {
const pool = await dmdb.createPool({
connectString: 'dm://zckf:zckf@192.168.110.20:5236?loginEncrypt=false',
poolAlias: 'mypool'
})
const conn = await pool.getConnection()
let funcName = `begin
:ret := pkg_imp_common.Getinfno(:var_infno, :var_output, :cur_data);
end;`
const params = {
ret: {
dir: dmdb.BIND_OUT,
type: dmdb.STRING
},
var_infno: '100006',
var_output: {
dir: dmdb.BIND_OUT,
type: dmdb.STRING,
maxSize: 500
},
cur_data: {
dir: dmdb.BIND_OUT,
type: dmdb.CURSOR
}
}
const result = await conn.execute(funcName, params)
console.log(result.outBinds)
// const cursor = result.outBinds[2] // 位置 2 对应 cur_data
// if (cursor) {
// const rows = await cursor.getRows() // 获取所有行
// console.log(rows)
// // 关闭游标
// await cursor.close()
// } else {
// console.log('游标为空')
// }
} catch (err) {
console.log(err)
}
}
reqFunc()
PS D:\Innovation\Develop\implat-dm-api> node test.js
[
1,
'{"code":"0","message":"执行成功","db_time":"2024-11-19 12:18:33","output":{"data":{}}}',
null
]
游标返回的是null呢, 我确定这个存储过程没有问题, 以下是直接调用存储过程的代码
[执行语句1]
Declare
Ret Number(2);
Var_Output Varchar2(500);
Cur_Data Sys_Refcursor;
Var_Code Varchar2(100);
Var_Name Varchar2(100);
Var_Pinyin Varchar2(100);
Begin
Ret := Pkg_Imp_Common.Getinfno('100006', Var_Output, Cur_Data);
Fetch Cur_Data
Into Var_Code, Var_Name, Var_Pinyin;
dbms_output.put_line(Var_Code);
dbms_output.put_line(Var_Name);
dbms_output.put_line(Var_Pinyin);
End;
执行成功,执行耗时1毫秒。
影响了1条记录。
100006
登录
DL
同样的调用, 这是oracledb的返回
{
outBinds: {
var_output: '{\r\n' +
' "code" : "0",\r\n' +
' "message" : "执行成功",\r\n' +
' "db_time" : "2024-11-20 07:55:42",\r\n' +
' "output" : {\r\n' +
' "data" : null\r\n' +
' }\r\n' +
'}',
cur_data: ResultSet {
_rowCache: [],
_processingStarted: false,
_convertedToStream: false,
_allowGetRowCall: false,
_isActive: false,
_parentObj: [Connection]
},
ret: '1'
}
}
如果dmdb不支持游标, 那从函数返回结果集这种要怎么返回呢, 因为函数里有一些其他处理的,也没办法都转成select语句啊