如何使用node.js运行oracle用户定义函数
我正在尝试使用oracledb驱动程序通过node.js在oracle db上运行用户定义的函数。我的oracle函数在包z_1419_pkg中声明为如何使用node.js运行oracle用户定义函数,node.js,oracle,user-defined-functions,Node.js,Oracle,User Defined Functions,我正在尝试使用oracledb驱动程序通过node.js在oracle db上运行用户定义的函数。我的oracle函数在包z_1419_pkg中声明为 FUNCTION GET_CUSTOMER_INFO(P_COMPANY_NAME VARCHAR2, P_COMP_CODE VARCHAR2) RETURN QC_UTL_PKG.CURSOR_TYPE IS C QC_UTL_PKG.CURSOR_TYPE; V_COMPANY_NAME COMPANIES.COMPAN
FUNCTION GET_CUSTOMER_INFO(P_COMPANY_NAME VARCHAR2, P_COMP_CODE VARCHAR2) RETURN QC_UTL_PKG.CURSOR_TYPE
IS
C QC_UTL_PKG.CURSOR_TYPE;
V_COMPANY_NAME COMPANIES.COMPANY_NAME%TYPE := TRIM(P_COMPANY_NAME);
V_COMP_CODE COMPANIES.COMPANY_CODE%TYPE := TRIM(P_COMP_CODE);
BEGIN
C := QC_CV_PKG.COMPANIES_BROWSE(NULL,V_COMP_CODE,V_COMPANY_NAME,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL);
RETURN C;
END;
我的node.js代码是
exports.syncOracle = function (req, res) {
var oracledb = require('oracledb');
var bindvars = {
p1: 'BM Dusters',
p2: 'bmduster',
};
oracledb.getConnection({
user : 'uname',
password : 'password',
connectString : 'locahost/TEST' },
function (err, conn) {
if (err) { console.error(err); return; }
console.log('success');
conn.execute('SELECT Z_1419_PKG.GET_CUSTOMER_INFO(:p1, :p2) from dual;' ,bindvars ,function (error, rows) {
if (error) {
console.log('ERROR: ' + error);
}
return res.status(200).json(rows);
});
});
};
但是我越来越
错误:错误:ORA-00900:无效的SQL语句
谁能告诉我我的代码有什么问题吗。我找不到任何关于如何将oracle函数与oracledb驱动程序一起使用的文档或示例
提前感谢。通过这样的API执行SQL语句时,不应在语句末尾加分号,因此对
conn.execute的调用应为:
conn.execute('SELECT Z_1419_PKG.GET_CUSTOMER_INFO(:p1, :p2) from dual',
bindvars ,function (error, rows) {
祝您好运。通过这样的API执行SQL语句时,不应在语句末尾加分号,因此对conn.execute的调用应为:
conn.execute('SELECT Z_1419_PKG.GET_CUSTOMER_INFO(:p1, :p2) from dual',
bindvars ,function (error, rows) {
祝您好运。如前所述,节点oracledb 0.6不支持用户定义的类型。您可以用PL/SQL编写一个“包装器”函数,将数据分解为当前支持的基本类型。如前所述,节点oracledb 0.6不支持用户定义的类型。您可以用PL/SQL编写一个“包装器”函数,将数据分解为当前支持的基本类型。谢谢Bob。你的回答很有帮助。但是现在我得到了一个不同的错误:NJS-010:选择列表中不支持的数据类型我修改了代码如下,conn.execute('select Z_1419_PKG.GET_PARTS_INFO(:p1,:p2)from dual',bindvars,{outFormat:oracledb.OBJECT},function(error,rows){仍然收到相同的错误我猜这是因为此函数返回一个自定义游标类型。您可以将其更改为返回SYS_REFCURSOR,而node.js可能能够处理它。但是,由于这是一个新问题,我建议您将其作为一个新问题发布。谢谢Bob。您的回答很有帮助。但现在我收到了一个不同的错误错误错误r:NJS-010:选择列表中不支持的数据类型我修改代码如下,conn.execute('select Z_1419_PKG.GET_PARTS_INFO(:p1,:p2)from dual',bindvars,{outFormat:oracledb.OBJECT},function(error,rows){仍然收到相同的错误我猜这是因为此函数返回一个自定义游标类型。您可以将其更改为返回SYS_REFCURSOR,而node.js可能能够处理它。但是,由于这是一个新问题,我建议您将其作为一个新问题发布。谢谢Bob。您的回答很有帮助。但现在我收到了一个不同的错误错误错误r:NJS-010:选择列表中不支持的数据类型我修改代码如下,conn.execute('select Z_1419_PKG.GET_PARTS_INFO(:p1,:p2)from dual',bindvars,{outFormat:oracledb.OBJECT},function(error,rows){仍然收到相同的错误我猜这是因为此函数返回一个自定义游标类型。您可以将其更改为返回SYS_REFCURSOR,node.js可能能够处理它。但是,由于这是一个新问题,我建议您将其作为一个新问题发布。