标识符必须声明为ORA-06550和PLS-00201

时间:2014-12-08 21:02:51

标签: c# sql asp.net oracle11g oracle-sqldeveloper

我有两个数据库;一个在本地服务器;

Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production
PL/SQL Release 11.1.0.7.0 - Production
"CORE   11.1.0.7.0  Production"
TNS for 64-bit Windows: Version 11.1.0.7.0 - Production
NLSRTL Version 11.1.0.7.0 - Production

另一个是VM:

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
"CORE   11.2.0.4.0  Production"
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production

这些服务器的其他所有内容都是相同的。 我对两台服务器都 DBA 。所有表和存储过程都在两个数据库中正常工作,但是当Asp.net尝试连接到它时,一个存储过程不起作用。

当我运行连接到VM数据库的Asp.net应用程序时,我收到以下错误,告诉我必须声明存储过程:

Message: Sys.WebForms.PageRequestManagerServerErrorException: ORA-06550: line 1, column 7: PLS-00201: identifier 'GETINFO' must be declared ORA-06550: line 1, column 7: PL/SQL: Statement ignored

我打开我的SQL Developer并调试VM数据库上的过程,我得到了所需的值。 如果我尝试获取特定的存储过程,它只会发生在.Net应用程序中。其他所有东西,都是其他存储过程,工作正常。

我已采取了哪些措施来解决问题;

  1. 更改了程序的名称(没有工作)
  2. 检查架构以确保所有表和存储过程都属于正确的用户(它们属于正确的用户)
  3. 即使该用户创建了存储过程,我也授予了用户访问权限。
  4. 我删除并重新创建了存储过程
  5. 我使用了Myuser.storedprocedure名称表示法,但它没有工作
  6. 我不明白的是,完全相同的代码在本地网络上工作,而且我可以通过Oracle SQL Developer调试存储过程。

    我可以在这里分享存储的产品,但它真的很长。

    我该如何解决这个问题?

4 个答案:

答案 0 :(得分:3)

由于执行存储过程的权限不足,您收到此错误。尝试在用户级别授予权限(用户级别表示您通过哪些凭据连接到数据库。请检入配置文件)。

我遇到了同样的问题。我在Oracle DB中创建了一个存储过程。我执行了,它编译成功。但是,它在运行时遇到问题。在用户级别为存储过程授予权限后,问题就完全解决了。

  

运行时异常ORA-06550:第1行第7列:
  PLS-00201:标识符' Package.StoredProcedure'必须申报   ORA-06550:第1行第7列:PL / SQL:忽略语句

答案 1 :(得分:1)

检查连接字符串并确保从C#应用程序调用正确的数据库和/或模式名称。

如果所有其他存储过程都正常工作,并且在oracle sql developer上调试时这个特定的存储过程不能正常工作;它必须是连接问题。如果它在DBA帐户下调试和处理这两个数据库,那么也应该没有权限问题。

我认为如果你专注于连接,就像mmmmmpie在评论中所说,你应该找到问题。

答案 2 :(得分:0)

在数据库中更改存储过程时出现此错误。

用于更新以以下内容开头的脚本:

PROCEDURE myProcedure

通过添加以下行:

CREATE OR REPLACE myProcedure

解决了此错误。就我而言,也许最初没有显示此错误,因为它是一个新的存储过程。

答案 3 :(得分:-1)

当我们在机器上安装新的Java代码并调用Oracle程序包时,出现了此错误, 出现

之类的错误
  

ORA 06550‘MX_CREAT_CUST_PKG'标识符必须声明,Java   春季apicaton正在使用电子钱包来触发用户ID和   密码

, 由于我们具有开发人员访问权限,我们甚至不知道它触发了哪个用户ID,涉及的DBA检查了给定ID,访问权限,包的编译以及所有未发现问题的角色。

后来通过信封团队,我们知道用不同的用户ID替换了钱包,该用户ID无法访问包装并更正了钱包文件中的用户ID

大多数情况下,问题是用户ID无权访问,如果从Java或其他应用程序触发,请检查连接字符串, 获得对用户ID的适当访问权限