【问题标题】:Identifier must be declared ORA-06550 and PLS-00201标识符必须声明为 ORA-06550 和 PLS-00201
【发布时间】:2015-02-06 15:09:08
【问题描述】:

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

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

另一个是虚拟机:

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 名称符号,它不起作用

我不明白的是,完全相同的代码正在本地网络上运行,而且我可以通过 Oracle SQL Developer 调试存储过程。

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

我该如何解决这个问题?

【问题讨论】:

  • 我们能看到代码的相关部分和/或函数调用本身吗?您是否为应用程序使用完全相同的 ODBC 连接器?如果数据库级别的所有内容都相同,那么我们必须查看应用程序。

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


【解决方案1】:

您收到此错误是因为执行存储过程的权限不足。尝试在用户级别授予权限(用户级别意味着您通过哪些凭据连接到数据库。检查您的配置文件)。

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

运行时异常 ORA-06550:第 1 行第 7 列:
PLS-00201:必须声明标识符“Package.StoredProcedure”
ORA-06550:第 1 行,第 7 列:PL/SQL:语句被忽略

【讨论】:

    【解决方案2】:

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

    当您在 oracle sql developer 上调试时,如果所有其他存储过程都工作正常,而这个特定的存储过程不能正常工作;一定是连接问题。如果它在 DBA 帐户下调试并在两个数据库上工作,则也不应该存在权限问题。

    我认为,如果您像 mmmmmpie 在他的评论中所说的那样专注于连接,您应该会找到问题所在。

    【讨论】:

      【解决方案3】:

      我在数据库中更改存储过程时收到此错误。

      用于更新更改的脚本开始于:

      PROCEDURE myProcedure
      

      通过添加以下行:

      CREATE OR REPLACE myProcedure
      

      解决了这个错误。在我的例子中,这个错误可能一开始没有显示,因为它是一个新的存储过程。

      【讨论】:

        猜你喜欢
        • 2014-05-26
        • 2014-06-24
        • 1970-01-01
        • 1970-01-01
        • 2019-12-17
        • 2021-12-22
        • 2016-07-25
        • 2018-08-02
        • 1970-01-01
        相关资源
        最近更新 更多