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

Oracle匿名PL/SQL块中缺少关键字错误,oracle,plsql,Oracle,Plsql,匿名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; 执行此块时

匿名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;

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

光标末端缺少分号:

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
SQL>declare
2.
当前10个小时内有3个员工
4选择*
5来自用户表
6.
7开始
8对于10 cur循环中的employees\u rec中的employees\u rec
9 dbms_output.put_行(
10名员工| | | | | | | | |员工|周|号);
11端环;
12结束;
13  /
对于10 cur循环中的employees\u rec中的employees\u rec
*
第8行错误:
ORA-06550:第8行第8列:
PL/SQL:ORA-00905:缺少关键字
ORA-06550:第4行第5列:
PL/SQL:SQL语句被忽略
ORA-06550:第11行第4列:
PLS-00103:在预期以下情况时遇到符号“结束”:
begin函数pragma过程子类型类型
当前光标删除
先于

你有3个错误;一个在第8行,因为光标无效;一个在第11行,因为光标无效而没有发生循环;另一个在第4行,表示“语句已忽略”。

在定义光标查询后放一个分号

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;

这个问题似乎离题了,因为它太本地化了