2016-02-03 62 views
2

我在Nodejs中使用oracledb包來運行Oracle中的存儲過程,該過程返回一個參考遊標,但出現錯誤PLS-00201 - 標識符'GETDATA'必須聲明,該存儲過程在我的Oracle數據庫中名爲MYPACKAGE的包中定義。到目前爲止,我已經嘗試運行在MYPACKAGE執行授予執行usernameValue在SQL開發人員,但沒有幫助。以下是我的代碼:PLS-00201 - 必須聲明標識符'Stored-Procedure-Name'

我真的很感謝你的幫助!

var oracledb = require('oracledb'); 

var numRows = 2; 

exports.test = function(req, res) { 
oracledb.getConnection({ 
    user: "usernameValue", 
    password: "passwordValue", 
    connectString: "ServerName/Service_Name" 
}, function(err, connection) { 
    if (err) { 
      console.error("in connection error "+err.message); 
      return; 
    } 
    var bindvars = { 
     inSchemaOwner: 'MySchema', 
     cRefCur: { type: oracledb.CURSOR, dir : oracledb.BIND_OUT } 
    }; 
    connection.execute(
     "BEGIN GETDATA(:inSchemaOwner, :cRefCur); END;", 
     bindvars, 
     function(err, result) 
     { 
     if (err) { 
      console.error(err.message); 
      doRelease(connection); 
      return; 
     } 
     console.log(result.outBinds.cRefCur.metaData); 
     fetchRowsFromRS(connection, result.outBinds.cRefCur, numRows); 
     }); 
}); 
} 

回答

1

如果存儲過程GETDATA在包MYPACKAGE,然後調用它,你需要用包名前綴的存儲過程:

 "BEGIN MYPACKAGE.GETDATA(:inSchemaOwner, :cRefCur); END;", 

否則,甲骨文認爲你正試圖請撥打名爲GETDATA'standalone' procedure。 「獨立」存儲過程存在於程序包之外。

此外,如果包MYPACKAGE是比usernameValue其他的模式,你需要前綴與包所有者的程序名稱爲好,例如:

 "BEGIN PACKAGEOWNER.MYPACKAGE.GETDATA(:inSchemaOwner, :cRefCur); END;", 

最後,爲了調用存儲過程中,程序需要在包規範中聲明並在包體中定義。

+0

謝謝!有效!我沒有把它的名字放在它之前。非常感謝! – Nat

相關問題