2016-02-03 61 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

相关问题