簡體   English   中英

如何使用node.js運行oracle用戶定義的函數

[英]How to run oracle user defined functions using node.js

我正在嘗試使用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函數的文檔或示例。

提前致謝。

通過這樣的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中編寫一個“包裝器”函數,該函數將數據分解為當前支持的基本類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM