【问题标题】:How to add a stored procedure to Oracle database?如何将存储过程添加到 Oracle 数据库?
【发布时间】:2013-03-30 17:53:35
【问题描述】:

通过 SQL Developer,我向 Oracle 数据库添加了一个新的存储过程。它不仅列在存储过程列表中(与所有其他 SP 一起),而且我可以在 SQL Developer 上轻松执行它。

问题是我似乎无法从外部应用程序执行它。数据库链接到它,我可以调用所有其他存储过程,但不能调用我刚刚创建的那个。我得到的错误信息是:

ORA-06550:第 1 行,第 7 列:PLS-00201:必须声明标识符“SETDATE” ORA-06550:第 1 行,第 7 列:PL/SQL:忽略语句

我从其他有效的 SP 复制了访问和权限配置,但它并没有真正改变任何东西。

【问题讨论】:

  • 您的应用程序是否以程序所有者的身份进行连接?如果不是,它是否被引用为user.procedure();其他的有效吗?听起来您可能拥有(也许是公开的)其他程序的同义词,但没有您的新程序……假设您已按照您的说明正确授予执行权限。
  • 真的相关吗?当通过 SQL Developer 执行时,它就可以完成它的工作。
  • 您需要授权才能从用户那里执行它。
  • @Rodrigo 无论您是以所有者身份还是其他用户身份登录,都会大不相同。请显示完整的创建过程声明,以及您提供的所有授权。另外,请提供您用于 SQL Developer 的帐户以及您用于外部应用程序的帐户。

标签: database oracle stored-procedures


【解决方案1】:

调试这类事情的好处是:

SELECT owner, object_name, object_type
FROM   all_objects
WHERE  object_name IN( 'PROCEDURE_WHICH_WORKS', 'PROCEDURE_WHICH_DOESNT' )

如果 SQL*Developer 在错误的模式中创建它或者缺少同义词或类似的东西,这应该很明显。如果都一样,那么您需要查看可能缺少的 GRANT EXECUTE 权限。

您确定 SQL*Developer 和您的外部程序以完全相同的用户身份连接吗?只是为了确保你可以

SELECT user FROM dual

【讨论】:

    猜你喜欢
    • 2014-09-02
    • 1970-01-01
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-30
    • 2010-09-19
    • 2017-10-19
    相关资源
    最近更新 更多