【问题标题】:PLS-00201 - identifier 'Stored-Procedure-Name' must be declaredPLS-00201 - 必须声明标识符“Stored-Procedure-Name”
【发布时间】:2016-05-13 07:18:01
【问题描述】:

我在 Nodejs 中使用 oracledb 包在 Oracle 中运行返回引用游标的存储过程,但我收到错误 PLS-00201 - 必须声明标识符“GETDATA”,存储过程在我的 Oracle 上的包中定义名为 MYPACKAGE 的数据库。到目前为止,我已经尝试在 MYPACKAGE 上对 sql developer 中的 usernameValue 运行授权执行,但没有帮助。以下是我的代码:

非常感谢您的帮助!

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);
      });
});  
}

【问题讨论】:

    标签: function stored-procedures plsql


    【解决方案1】:

    如果存储过程GETDATA在包MYPACKAGE中,那么调用它需要在存​​储过程前面加上包名:

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

    否则,Oracle 认为您正在尝试调用名为 GETDATA'standalone' procedure。 “独立”存储过程存在于包之外。

    另外,如果包MYPACKAGEusernameValue以外的模式中,您还需要在过程名称前加上包所有者,例如:

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

    最后,为了调用存储过程,该过程需要在包规范中声明,并在包体中定义。

    【讨论】:

    • 谢谢!!有效!我没有把包名放在它前面。非常感谢!
    猜你喜欢
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 2021-12-22
    • 2016-07-25
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多