这个简单的块有啥问题? PL SQL

Posted

技术标签:

【中文标题】这个简单的块有啥问题? PL SQL【英文标题】: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 选项中禁用“将空行视为语句终止符”。 【参考方案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;
/

然后再次执行

【讨论】:

没什么不同:/

以上是关于这个简单的块有啥问题? PL SQL的主要内容,如果未能解决你的问题,请参考以下文章

JDBC + PL/SQL = 这么简单,还是有啥陷阱?

使用 Oracle 的块过程 PL/SQL

我在 PL SQL 中的 CASE 语句有啥问题?

这个 PL/SQL 函数有啥问题?

这个 PL/SQL 有啥问题?绑定变量 * 未声明

在 c++ 中使用 x86 DIV 的这个 asm 块有啥用?