Oracle 匿名 PL/SQL 块中缺少关键字错误

Posted

技术标签:

【中文标题】Oracle 匿名 PL/SQL 块中缺少关键字错误【英文标题】:Missing keyword error in Oracle anonymous PL/SQL block 【发布时间】:2013-09-13 09:52:53 【问题描述】:

匿名 PL/SQL 块:

DECLARE
  CURSOR employees_in_10_cur
    IS
    SELECT *
    FROM ad_week_table

BEGIN
  FOR employee_rec 
  IN employees_in_10_cur
  LOOP
    DBMS_OUTPUT.put_line(employee_rec.ad_no || ',' || employee_rec.week_no);
  END LOOP;
END;

执行此块时出现缺少关键字的错误。我做错了什么?

【问题讨论】:

这个问题似乎离题了,因为它过于本地化了 【参考方案1】:

定义游标查询后加分号;

DECLARE
       CURSOR employees_in_10_cur
       IS
          SELECT *
            FROM ad_week_table;

    BEGIN
       FOR employee_rec 
       IN employees_in_10_cur
       LOOP
          DBMS_OUTPUT.put_line (
             employee_rec.ad_no || ',' || employee_rec.week_no );
       END LOOP;
    END;

【讨论】:

【参考方案2】:

光标末尾缺少分号:

CURSOR employees_in_10_cur
   IS
      SELECT *
        FROM ad_week_table;

错误消息将始终为您提供发生错误的行号。请务必检查并查看该区域。

例如;如果我更改表格以便可以运行它,我会得到以下信息:

SQL> declare
  2
  3     cursor employees_in_10_cur is
  4      select *
  5        from user_tables
  6
  7  begin
  8     for employee_rec in employees_in_10_cur loop
  9        dbms_output.put_line (
 10           employee_rec.ad_no || ',' || employee_rec.week_no );
 11     end loop;
 12  end;
 13  /
   for employee_rec in employees_in_10_cur loop
       *
ERROR at line 8:
ORA-06550: line 8, column 8:
PL/SQL: ORA-00905: missing keyword
ORA-06550: line 4, column 5:
PL/SQL: SQL Statement ignored
ORA-06550: line 11, column 4:
PLS-00103: Encountered the symbol "END" when expecting one of the following:
begin function pragma procedure subtype type <an identifier>
<a double-quoted delimited-identifier> current cursor delete
exists prior

你有 3 个错误;一个在第 8 行,因为光标无效,一个在第 11 行,因为循环没有发生,因为光标无效,一个在第 4 行,上面写着“语句被忽略”。

【讨论】:

以上是关于Oracle 匿名 PL/SQL 块中缺少关键字错误的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Oracle 匿名块中调用和执行 .sql 脚本文件

匿名 pl/sql 块中的声明顺序

如何在匿名 PL/SQL 块中自动显示所有 SQL 语句的输出

我可以在调用同一过程后将 PL/SQL 过程放在匿名块中吗?

在 DB2 PL/SQL 匿名块中声明局部变量和声明继续处理程序会导致错误?

Oracle Apex:PL/SQL 块中的 Javascript 代码