Shell脚本(单个查询的两次执行)

时间:2019-01-28 12:23:04

标签: oracle sqlplus

我在Linux环境中编写了一个.sql脚本,并在SQL * Plus中执行了该脚本,但是其中的一个查询却被执行了两次。

脚本:

cat s2.sql

/* Global Name of DB */

 select * from global_name;

/*Database Status */

SELECT INSTANCE_NAME, STATUS, DATABASE_STATUS FROM V$INSTANCE;

输出:

SQL> @ s2.sql

GLOBAL_NAME
--------------------------------------------------------------------------------
xyz


GLOBAL_NAME
--------------------------------------------------------------------------------
xyz


INSTANCE_NAME    STATUS       DATABASE_STATUS
---------------- ------------ -----------------
xyz           OPEN         ACTIVE

尽管得到了相同的结果,但我尝试使用扩展名.sql和.txt进行尝试。

为什么这样做,我该如何阻止呢?

1 个答案:

答案 0 :(得分:2)

问题是第二条评论。该行:

/*Database Status */

被解释为a buffer-submitting /,完全不是注释。如果您添加一个空格以匹配另一个空格:

/* Database Status */

那么它将被正确地视为注释,并且不会导致语句的第二次调用。

您看到的行为实际上是documented,有点-间接地:

  

您必须在斜杠星号(/ *)后面输入一个空格。