【问题标题】:sqlplus query with comment giving duplicate rows带有注释的sqlplus查询给出重复的行
【发布时间】:2016-12-19 14:38:25
【问题描述】:

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

select sysdate from dual
/
/*comment*/
EXIT

输出

SQL> @tt.sql

12-AUG-16

12-AUG-16

【问题讨论】:

  • 只是预感:尝试用;s 替换/s。
  • 不明白。为什么显示两行?
  • 如何运行“从 unix 使用 sqlplus”?我刚刚通过复制您的代码并将其直接粘贴到 SQLPlus 中进行了测试,并且正如预期的那样,当执行到达 EXIT 行时,它关闭了我的 SQLPlus 窗口(它退出,顾名思义) - 执行从未到达第二个 /,这在 SQLPlus 中的意思是“重复最后一个动作”(并完美地解释了第二行)。您确定没有将 EXIT 行注释掉吗?
  • 是的,我从 unix 运行它。即使我删除了最后一个斜杠(在 EXIT 之后),它也会给出重复的行。
  • “从 unix 运行”是什么意思——尤其是“运行”是什么意思?您是否只是在 SQLPlus 窗口中一一键入行?你有正在运行的脚本吗?您是否从文本编辑器复制并粘贴到 SQLPlus 窗口中?你是如何运行它的?

标签: oracle duplicates output rows sqlplus


【解决方案1】:

这是正在发生的事情。

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

然后 /*comment*/ 在 SQL 语句之外。所以它是由 SQLPlus 解释的,而不是作为 SQL 注释。

关键是,SQLPlus 脚本语言中的 cmets 有不同的语法;它们是以 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-14
    • 2021-10-22
    • 2018-08-03
    • 1970-01-01
    • 2014-07-30
    • 2018-04-16
    • 2013-09-02
    • 1970-01-01
    相关资源
    最近更新 更多