为什么C风格的注释会使insert语句运行两次?

时间:2014-11-24 17:30:10

标签: oracle oracle10g sqlplus oracle-xe

总而言之,我开始收到ORA-00001主键违规行为,并且我将问题追溯到我的一些INSERT INTO语句运行两次这一事实。然后我发现违规命令之后有一个C风格的评论:

WHENEVER SQLERROR EXIT FAILURE

SET ECHO OFF
SET HEADING OFF
SET PAGESIZE 0
SET FEEDBACK OFF
SET TIMING OFF
SET TIME OFF
SET TRIMSPOOL ON
SET TRIMOUT ON
SET LINESIZE 120

SET SQLBLANKLINES ON
SET SERVEROUTPUT ON

[...]

INSERT INTO INF_FIELD (FIELD_ID, CATEGORY_ID, COLUMN_EXPRESSION, DISPLAY_NAME, SORT_ORDER) VALUES (17, 1, 'FOO.NAME', 'Name of the foo', 17);

/*This is a comment*/

然后通过切换到这种语法轻松修复:

--This is a comment

/*...*/注释使SQL * Plus运行语句两次的确切原因是什么?

1 个答案:

答案 0 :(得分:4)

/* This is a comment */

请确保在/*之后有空格,
因此它被视为单行/多行注释。并不意味着执行最后存储的PL / SQL或SQL

详细说明。

忽略{* 1}}之后SQL * Plus解释的内容,并盲目地将其缓存到服务器中。除了/后跟/*new line

space

From Document:

  

您必须在斜杠(/ *)开头后输入一个空格   评价。