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

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

原创 小小亮 2022-11-04
17140

PLS-00201 表示您在语句中指定的标识符从未声明过,因此它不能被存储过程使用。

在这篇文章中,我们将讨论 PLS-00201 的一些错误模式。

  1. 未声明的变量
  2. DBMS_SQL
  3. 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 的包对于PUBLICEXECUTE来说很常见,例如DBMS_SQLDBMS_LOBUTL_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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论