带有注释的sqlplus查询,提供重复的行

时间:2016-08-12 14:26:34

标签: oracle duplicates output rows sqlplus

更新我的问题: 当我使用sqplus从unix运行此查询时,它给出了重复的输出 查询:

select sysdate from dual
/
/*comment*/
EXIT

输出

SQL> @tt.sql

12-AUG-16

12-AUG-16

1 个答案:

答案 0 :(得分:1)

以下是发生的事情。

前两行(包括/)构成一个完整的SQL语句。 SQLPlus执行它并显示第一行。

然后/ * comment * /是SQL语句的OUTSIDE。因此它被SQLPlus解释,而不是作为SQL注释。

关键是,SQLPlus脚本语言中的注释具有不同的语法;它们是以REM [ARK]开头的行。 / * comment * /不是SQLPlus中的注释。

相反,在SQLPlus中,斜杠/作为新行上的第一个字符意味着重复最后一个SQL命令(如果之后你有SQLPlus命令,如DESCRIBE或COLUMN,则忽略这些命令)。斜线后的所有内容都被忽略。为了说服自己,请再试一次,但注释行更改为/ * comment *(删除第二个斜杠)。你会看到相同的结果。

然后你有EXIT命令,但由于它后面没有斜杠,所以它不被视为已完成的命令。如果我在SQLPlus窗口中复制并粘贴您的代码,我会在下面看到截图。但是,如果此时按ENTER(或者如果这是在sql脚本中而不是从文本编辑器中复制和粘贴),则SQLPlus窗口将关闭。

希望这有帮助!

SQL> select sysdate from dual
  2  /

SYSDATE
----------
2016-08-12

1 row selected.

Elapsed: 00:00:00.00
SQL> /*comment*/

SYSDATE
----------
2016-08-12

1 row selected.

Elapsed: 00:00:00.01
SQL> EXIT