如何使用node.js运行oracle用户定义的函数

时间:2015-06-08 09:36:09

标签: node.js oracle user-defined-functions

我正在尝试使用oracledb驱动程序通过node.js在oracle db上运行用户定义的函数。我的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);
      });
  });

};

但我正在

  

错误:错误:ORA-00900:无效的SQL语句

有人可以告诉我我的代码有什么问题。我找不到任何关于如何在oracledb驱动程序中使用oracle函数的文档或示例。

提前致谢。

2 个答案:

答案 0 :(得分:0)

当通过这样的API执行SQL语句时,你不应该在语句的末尾添加一个分号,因此对conn.execute的调用应该是:

conn.execute('SELECT Z_1419_PKG.GET_CUSTOMER_INFO(:p1, :p2) from dual',
             bindvars ,function (error, rows) {

祝你好运。

答案 1 :(得分:0)

如前所述,node-oracledb 0.6不支持用户定义的类型。您可以在PL / SQL中编写一个“包装器”函数,将您的数据分解为当前支持的基本类型。