如何解决使用节点 oracledb 调用过程时无法读取未定义的属性“getRows”
我创建了这个程序:
CREATE OR REPLACE PROCEDURE GET_TABLE_COLUMN(tableName IN VARCHAR2,t_cursr OUT SYS_REFCURSOR)
AS
BEGIN
OPEN t_cursr FOR
SELECT COLUMN_NAME FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = tableName;
END;
它获取一个表的列名,它的名称作为 tableName 传递,然后将输出返回到 refcursor。 然后我使用 oracledb 来获取这样的结果行:
const oracledb = require('oracledb');
async function(proc,bind,ref,alter_script,acc){
let connection;
let row;
let status = 'none';
try{
connection = await oracledb.getConnection(acc);
if(alter_script === 'yes')
await connection.execute(`alter session set "_ORACLE_SCRIPT"=true`);
const result = await connection.execute(
`BEGIN ${proc} END;`,// **"proc" is the procedure i mentioned**
bind
);
if(ref === 'yes'){
const resultSet = result.outBinds.cursor;
row = await resultSet.getRows(369);// **I think the error comes from here**
await resultSet.close();
}
} catch(error){
console.error(error);
status = 'occured';
} finally{
if(connection){
try{
await connection.close();
} catch(error){
console.error(error);
return status;
} finally{
if(ref === 'yes')
return row;
if(status === 'occured')
return 'failed!';
return 'done!'
}
}
}
}
};
此后,它会将行发送到此函数:
const execute_func = require('./execute_function/execute');
const jsonConfig = require('../jsonconfig/read_write');
module.exports = {
callProc: async function(proc_name,bind_val,alter_oracle,filePath,acc){
let dataRows;
try{
//**This is where the row variable returned**
dataRows = await execute_func.execute(proc_name,acc);
} catch (error){
console.error(error);
} finally{
if(dataRows === 'failed!')
return 'failed!';
if(filePath)
//**The i saved to json file**
await jsonConfig.writeJson(dataRows,filePath);
return 'done!';
}
}
};
然后当使用 nodejs 运行包含由上述函数操作的功能的网站时,我收到此错误:
TypeError: Cannot read property 'getRows' of undefined
at Object.execute (D:\Sync\school_documents\3nd_year\2ndTerm\anToan_baoMatDuLieuHTTT\doAn\adminApp\functions\execute_function\execute.js:21:39)
at async Object.callProc (D:\Sync\school_documents\3nd_year\2ndTerm\anToan_baoMatDuLieuHTTT\doAn\adminApp\functions\callProc.js:9:24)
(node:10448) UnhandledPromiseRejectionWarning: TypeError [ERR_INVALID_ARG_TYPE]: The "data" argument must be of type string or an instance of Buffer,TypedArray,or DataView.
我认为问题出在我编写程序或代码的方式上,但经过长时间的研究,我无法修复它。请大家帮帮我好吗?非常感谢。
解决方法
您可以将 t_cursr
中 GET_TABLE_COLUMN
的定义更改为 t_cursr IN OUT SYS_REFCURSOR
或将 GET_TABLE_COLUMN
重写为
CREATE OR REPLACE PROCEDURE GET_TABLE_COLUMN(tableName IN VARCHAR2,t_cursr OUT SYS_REFCURSOR)
AS
csr SYS_REFCURSOR;
BEGIN
OPEN csr FOR
SELECT COLUMN_NAME FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = tableName;
t_cursr := csr;
END GET_TABLE_COLUMN;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。