2015-06-08 63 views
0

我想通過使用oracledb驅動程序的node.js在oracle數據庫上運行用戶定義的函數。我的Oracle函數聲明封裝z_1419_pkg作爲如何使用node.js運行oracle用戶定義的函數

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

有人能告訴我什麼是錯的我碼。我找不到任何有關如何在oracledb驅動程序中使用oracle函數的文檔或示例。

在此先感謝。

回答

0

當執行通過API的SQL語句,如這個,你不應該把一個分號在語句的結束,所以調用conn.execute應該是:

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

好運。

+0

感謝鮑勃。你的答案是helpful.But現在我得到一個不同的錯誤 錯誤:NJS-010:在選擇列表 不支持的數據類型我修改了代碼如下, conn.execute(「SELECT Z_1419_PKG.GET_PARTS_INFO(:P1,: p2)from dual,bindvars,{outFormat:oracledb.OBJECT},function(error,rows){ 仍然會得到相同的錯誤 –

+0

我猜這是因爲這個函數返回一個自定義的遊標類型。而是返回SYS_REFCURSOR,哪個node.js可能能夠處理。但是,由於這是一個新問題,我建議你把它作爲一個新問題發佈。 –

0

如前所述,node-oracledb 0.6不支持用戶定義的類型。你可以在PL/SQL中編寫一個'wrapper'函數,將你的數據分解成當前支持的基本類型。

相關問題