如何使用 node.js 运行 oracle 用户定义函数
How to run oracle user defined functions using node.js
我正在尝试 运行 通过 node.js 使用 oracledb 驱动程序在 oracle 数据库上定义一个用户定义的函数。我的 oracle 函数在 PACKAGE 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.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);
});
});
};
但我得到了
ERROR: Error: ORA-00900: invalid SQL statement
有人可以告诉我我的代码有什么问题吗?我找不到任何关于如何将 oracle 函数与 oracledb 驱动程序一起使用的文档或示例。
提前致谢。
当通过这样的 API 执行 SQL 语句时,您不应该在语句末尾放置分号,因此对 conn.execute
的调用应该是:
conn.execute('SELECT Z_1419_PKG.GET_CUSTOMER_INFO(:p1, :p2) from dual',
bindvars ,function (error, rows) {
祝你好运。
如前所述,node-oracledb 0.6 不支持用户定义的类型。您可以在 PL/SQL 中编写一个 'wrapper' 函数,将您的数据分解为当前支持的基本类型。
我正在尝试 运行 通过 node.js 使用 oracledb 驱动程序在 oracle 数据库上定义一个用户定义的函数。我的 oracle 函数在 PACKAGE 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.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);
});
});
};
但我得到了
ERROR: Error: ORA-00900: invalid SQL statement
有人可以告诉我我的代码有什么问题吗?我找不到任何关于如何将 oracle 函数与 oracledb 驱动程序一起使用的文档或示例。
提前致谢。
当通过这样的 API 执行 SQL 语句时,您不应该在语句末尾放置分号,因此对 conn.execute
的调用应该是:
conn.execute('SELECT Z_1419_PKG.GET_CUSTOMER_INFO(:p1, :p2) from dual',
bindvars ,function (error, rows) {
祝你好运。
如前所述,node-oracledb 0.6 不支持用户定义的类型。您可以在 PL/SQL 中编写一个 'wrapper' 函数,将您的数据分解为当前支持的基本类型。