我遇到了一个非常烦人的问题。我在Notepad++中编写了一些SQL脚本。现在,当我尝试通过命令行(在Windows 7上)通过SQL*Plus执行它们时,我会收到像
然后,我将脚本复制并粘贴到SQL Developer工作表窗口中,点击运行按钮,脚本就可以无错误地执行。
经过长时间的调查,我认为SQL*Plus对一些空格(包括换行符和制表符)存在问题,它无法理解它们。
由于我认为SQL Developer知道如何去除奇怪的空格,所以我尝试了这个方法:将脚本粘贴到SQL Developer工作表窗口中,然后从那里复制并粘贴回SQL脚本中。这解决了某些文件的问题,但不是所有文件。有些文件在某些地方出现错误,原因不明。
你是否遇到过这个问题?我应该怎么做才能通过命令行的SQL*Plus运行这些脚本?
更新:
以下是一个脚本示例,在SQL*Plus中无法工作,但在SQL Developer中可以正常工作:
ORA-00933: SQL command not properly ended
这样的错误。然后,我将脚本复制并粘贴到SQL Developer工作表窗口中,点击运行按钮,脚本就可以无错误地执行。
经过长时间的调查,我认为SQL*Plus对一些空格(包括换行符和制表符)存在问题,它无法理解它们。
由于我认为SQL Developer知道如何去除奇怪的空格,所以我尝试了这个方法:将脚本粘贴到SQL Developer工作表窗口中,然后从那里复制并粘贴回SQL脚本中。这解决了某些文件的问题,但不是所有文件。有些文件在某些地方出现错误,原因不明。
你是否遇到过这个问题?我应该怎么做才能通过命令行的SQL*Plus运行这些脚本?
更新:
以下是一个脚本示例,在SQL*Plus中无法工作,但在SQL Developer中可以正常工作:
SET ECHO ON;
INSERT INTO MYDB.BOOK_TYPE (
BOOK_TYPE_ID, UNIQUE_NAME, DESCRIPTION, VERSION, IS_ACTIVE, DATE_CREATED, DATE_MODIFIED
)
SELECT MYDB.SEQ_BOOK_TYPE_ID.NEXTVAL, 'Book-Type-' || MYDB.SEQ_BOOK_TYPE_ID.NEXTVAL, 'Description-' || MYDB.SEQ_BOOK_TYPE_ID.NEXTVAL, A.VERSION, B.IS_ACTIVE, SYSDATE, SYSDATE FROM
(SELECT (LEVEL-1)+0 VERSION FROM DUAL CONNECT BY LEVEL<=10) A,
(SELECT (LEVEL-1)+0 IS_ACTIVE FROM DUAL CONNECT BY LEVEL<=2) B
;
我收到的错误:
SQL> SQL> SET ECHO ON;
SQL>
SQL> INSERT INTO MYDB.BOOK_TYPE (
2 BOOK_TYPE_ID, UNIQUE_NAME, DESCRIPTION, VERSION, IS_ACTIVE, DATE_CREATED, DATE_MODIFIED
3 )
4 SELECT MYDB.SEQ_BOOK_TYPE_ID.NEXTVAL, 'Book-Type-' || MYDB.SEQ_BOOK_TYPE_ID.NEXTVAL, 'Description-' || MYDB.SEQ_BOOK_TYPE_ID.NEXTVAL, A.VERSION, B.IS_ACTIVE, SYSDATE, SYSDATE FROM
5
SQL> (SELECT (LEVEL-1)+0 VERSION FROM DUAL CONNECT BY LEVEL<=10) A,
2 (SELECT (LEVEL-1)+0 IS_ACTIVE FROM DUAL CONNECT BY LEVEL<=2) B
3
SQL> ;
1 (SELECT (LEVEL-1)+0 VERSION FROM DUAL CONNECT BY LEVEL<=10) A,
2* (SELECT (LEVEL-1)+0 IS_ACTIVE FROM DUAL CONNECT BY LEVEL<=2) B
你可以看到错误出现在 (SELECT (LEVEL-1)+0 IS_ACTIVE FROM DUAL CONNECT BY LEVEL<=2) B
这一行(由于某种原因,在所有遇到这个错误的文件中,错误都出现在结束分号之前的最后一行)。