【问题标题】:What's wrong with this simple block? PL SQL这个简单的块有什么问题? PL SQL
【发布时间】:2020-01-09 09:50:39
【问题描述】:

我正在尝试在 TOAD 上运行这个简单的匿名块,但出现以下错误。有人能帮我吗?

代码如下:

BEGIN
FOR REC_CONF IN
(       
    SELECT DISTINCT CONF.SCHEMA, CONF.TABELLA, CONF.CAMPO, CONF.TIPO_CAMPO, CONF.LUNG_CAMPO, 
CONF.CAMPO_ACCESSO
    FROM EDWH.EDWH_GDPR_CONFIG CONF
    WHERE UPPER(FLAG_CANC) = 'Y'
    AND UPPER(SCHEMA) = UPPER('EDWH')
    ORDER BY CONF.TABELLA, CONF.CAMPO ASC
)
LOOP

    DBMS_OUTPUT.PUT_LINE (REC_CONF.TABELLA);
END LOOP;
END;

这应该循环到 EDWH.EDWH_GDPR_CONFIG 并将属性打印到 dbms_output.put_line。

这是我得到的错误:

[Error] Execution (10: 8): ORA-06550: row 10, column 8:
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:

   ( begin case declare exit for goto if loop mod null pragma
   raise return select update while with <an identifier>
   <identifier between quotes>
   <a bind variable> << continue close current delete fetch
   lock insert open rollback savepoint set sql execute commit
   forall merge pipe purge)

【问题讨论】:

  • 除了下面的答案(请不要忘记将相关答案标记为正确!),首选项中可能还有一个选项可以将空行视为终止符,您可以禁用它并然后“执行”将按预期运行它。 (根据this answer on the toadworld forum,虽然这是指12.9;我很确定这个选项在早期版本中可用)。或者你可以从你的程序中删除空白行。
  • 这也是一个很好的解决方案。我刚刚做到了。致其他用户:在执行/编译页面的 Toad 选项中禁用“将空行视为语句终止符”。

标签: oracle plsql procedure


【解决方案1】:

我相信您以错误的方式运行脚本。它是一个 PL/SQL 脚本,因此可以通过按 F9 键或按 TOAD 工具栏中的“作为脚本执行”按钮来运行它。

如果光标位于此代码中的某个位置(例如,在BEGIN 上)并且您按下了&lt;Ctrl + Enter&gt;,那么您将得到

ORA-06550:第 12 行,第 4 列: PLS-00103:在预期以下情况之一时遇到符号“文件结尾”: (开始 case 声明退出 goto if loop mod null pragma 在使用时提高返回选择更新

所以 - 将它作为 脚本 运行。

【讨论】:

  • 嗯...你是对的。不知道为什么我用 运行脚本。非常感谢,祝你有美好的一天!
  • 不客气。 @APC,毕竟这是一个事实,而不是一个好的猜测 :)
【解决方案2】:

尝试在最后一个“END;”之后添加'/'

END LOOP;
END;
/

然后再次执行

【讨论】:

  • 没什么不同:/
猜你喜欢
  • 2011-08-28
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
  • 2011-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多