我遇到了一个奇怪的场景。我有一个脚本文件,我可以从像plsql developer这样的工具运行良好,但是当我从sqlplsus运行该文件时,它会出错。我找到了相同的原因。我怀疑的是“理由”的原因:)
错误的原因在于以下脚本。请注意脚本的确切结构 -
false
由于WHENEVER SQLERROR EXIT FAILURE之后的评论部分,我收到错误;错误是 -
SP2-0103:SQL缓冲区中没有任何内容可以运行。 SP2-0042:未知命令“AS” - 其余的行被忽略。
当我从文件中删除该评论部分时,脚本从sqlplus运行正常。
我的问题是为什么评论部分在EXIT FAILURE之后创建错误?
感谢。
答案 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
)。空缓冲区不是错误,而是一条无法在缓冲区中运行的消息。