WHENEVER SQLERROR EXIT FAILURE在sqlplus中抛出错误之后的注释部分

时间:2015-12-04 10:41:04

标签: database oracle oracle11g

我遇到了一个奇怪的场景。我有一个脚本文件,我可以从像plsql developer这样的工具运行良好,但是当我从sqlplsus运行该文件时,它会出错。我找到了相同的原因。我怀疑的是“理由”的原因:)

错误的原因在于以下脚本。请注意脚本的确切结构 -

false

由于WHENEVER SQLERROR EXIT FAILURE之后的评论部分,我收到错误;错误是 -

  

SP2-0103:SQL缓冲区中没有任何内容可以运行。 SP2-0042:未知命令“AS”    - 其余的行被忽略。

当我从文件中删除该评论部分时,脚本从sqlplus运行正常。

我的问题是为什么评论部分在EXIT FAILURE之后创建错误?

感谢。

1 个答案:

答案 0 :(得分:1)

您的评论被解释为/表示“运行缓冲区中的内容”。只需在/*之后添加一个空格。

请参阅下面您可以在sqlplus中使用的评论类型:

  

语法:

     

备注单行评论

     

- 单行评论

     

/ *单行注释* /

     

/ *

 Multi Line
 comment    
     

* /

     

常见的错误是使用/ *但后面没有空格(或换行符),这将被解释为“/”并将执行   以前的SQL命令。虽然实际评论会被忽略   此行为可能会产生重大意外结果:即使   没有先前的命令执行,然后Oracle会出错   “SQL缓冲区无法运行”。

http://ss64.com/ora/syntax-sqlplus-remark.html

更新:解释错误:

“要运行的SQL缓冲区中没有任何内容”错误意味着缓冲区中根本没有任何内容。执行以前的命令并从缓冲区中清除。如果您已经写了select sommething然后按Enter键然后斜杠然后在缓冲区中将select something并尝试运行它。 但现在缓冲区里什么都没有了。

但为什么AS会出现错误?嗯,解释器在运行/*CREATE...之后的行(该行的唯一含义是运行的是什么)缓冲区)它转到下一行并期望一个新命令。命令为AS。错误是"unknown command "AS"",这是正确的。

从技术上讲,这是第一个错误。 (你问过whenever sqlerror exit)。空缓冲区不是错误,而是一条无法在缓冲区中运行的消息。