暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

故障处理|Oracle如何解决 PLS-00201:必须声明标识符“DBMS_SQL”

原创 小小亮 2022-11-04
6116

PLS-00201

我们已经讨论了 PLS-00201 的一些常见模式这是另一个案例。

发现CTXSYS的一些包是无效的,大部分编译错误都是相同的模式,PLS-00201。

PLS-00201: identifier 'DBMS_SQL' must be declaredPLS-00201: identifier 'DBMS_SCHEDULER' must be declaredPLS-00201: identifier 'DBMS_LOB' must be declaredPLS-00201: identifier 'DBMS_JOB' must be declaredPLS-00201: identifier 'UTL_HTTP' must be declared

很可能,您对要处理的对象没有EXECUTE特权。

在这种情况下, SYS拥有的那些包是对PUBLIC开放的,并且非常被用户使用。

解决方案

在正常情况下,我们应该授予存储过程的所有者适当的权限,通常是对对象的EXECUTE 。在这种情况下,我们知道我们应该再次将这些包上的EXECUTE授予PUBLIC

SQL> conn / as sysdba
Connected.
SQL> GRANT EXECUTE ON SYS.DBMS_SQL TO PUBLIC;

Grant succeeded.

SQL> GRANT EXECUTE ON SYS.DBMS_SCHEDULER TO PUBLIC;

Grant succeeded.

SQL> GRANT EXECUTE ON SYS.DBMS_LOB TO PUBLIC;

Grant succeeded.

SQL> GRANT EXECUTE ON SYS.DBMS_JOB TO PUBLIC;

Grant succeeded.

SQL> GRANT EXECUTE ON SYS.UTL_HTTP TO PUBLIC;

Grant succeeded.

要知道哪些SYS包被授予PUBLIC,您可以使用以下语句。

SQL> select table_name from dba_tab_privs where owner = 'SYS' and grantee = 'PUBLIC' and privilege = 'EXECUTE' and TYPE = 'PACKAGE' order by 1;



原文标题:How to Resolve PLS-00201: identifier 'DBMS_SQL' must be declared

原文作者:Ed Chen

原文链接:https://logic.edchen.org/how-to-resolve-pls-00201-identifier-dbms_sql-must-be-declared/

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论