PLS-00201 表示您在语句中指定的标识符从未声明过,因此它不能被存储过程使用。
在这篇文章中,我们将讨论 PLS-00201 的一些错误模式。
- 未声明的变量
- DBMS_SQL
- DBMS_LOCK
A. 未声明的变量
什么是未声明的变量?让我们看一个例子来说明清楚。
SQL> set serveroutput on;
SQL> begin
2 select first_name into v_fn from employees where last_name = 'Chen';
3 dbms_output.put_line('The first name is: ' || v_fn);
4 end;
5 /
select first_name into v_fn from employees where last_name = 'Chen';
*
ERROR at line 2:
ORA-06550: line 2, column 26:
PLS-00201: identifier 'V_FN' must be declared
ORA-06550: line 2, column 31:
PL/SQL: ORA-00904: : invalid identifier
ORA-06550: line 2, column 3:
PL/SQL: SQL Statement ignored
ORA-06550: line 3, column 49:
PLS-00201: identifier 'V_FN' must be declared
ORA-06550: line 3, column 3:
PL/SQL: Statement ignored在示例中,它找到了一个未在编程单元中任何地方声明的标识符。
解决方案
实际上,标识符是一个局部变量,我们只是忘记在使用前声明它。让我们将变量声明为字符串。
SQL> declare
2 v_fn varchar2(25);
3 begin
4 select first_name into v_fn from employees where last_name = 'Chen';
5 dbms_output.put_line('The first name is: ' || v_fn);
6 end;
7 /
The first name is: John
PL/SQL procedure successfully completed.最终结果已经成功输出。
B. DBMS_SQL
一些 SYS 的包对于PUBLIC到EXECUTE来说很常见,例如DBMS_SQL、DBMS_LOB或UTL_FILE。
PLS-00201: identifier 'DBMS_SQL' must be declared解决方案
在这种情况下,正确的权限可能会从PUBLIC消失或撤销。我在帖子中提供了解决方案: 故障处理|Oracle如何解决 PLS-00201:必须声明标识符“DBMS_SQL”。
C. DBMS_LOCK
DBMS_LOCK不向PUBLIC开放,应授予特定用户在需要时执行。
SQL> begin
2 dbms_lock.sleep(10);
3 end;
4 /
dbms_lock.sleep(10);
*
ERROR at line 2:
ORA-06550: line 2, column 3:
PLS-00201: identifier 'DBMS_LOCK' must be declared
ORA-06550: line 2, column 3:
PL/SQL: Statement ignored解决方案
我们应该通过SYS将包的EXECUTE权限授予用户。
SQL> show user
USER is "SYS"
SQL> grant execute on dbms_lock to hr;
Grant succeeded.然后我们再次运行编程单元。
SQL> begin
2 dbms_lock.sleep(10);
3 end;
4 /
PL/SQL procedure successfully completed.原文标题:How to Resolve PLS-00201: identifier must be declared
原文作者:Ed Chen
原文链接:https://logic.edchen.org/how-to-resolve-pls-00201-identifier-must-be-declared/
最后修改时间:2022-11-04 13:52:23
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




