更新我的问题: 当我使用sqplus从unix运行此查询时,它给出了重复的输出 查询:
select sysdate from dual
/
/*comment*/
EXIT
输出
SQL> @tt.sql
12-AUG-16
12-AUG-16
答案 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