2012-05-02 42 views
8

我現在面臨一個非常惱人的問題SQL腳本。我寫了(在Notepad ++中)一些SQL腳本。現在,當我嘗試通過SQL * Plus執行它們(通過命令行,在Windows 7上)時,我得到的錯誤如ORA-00933: SQL command not properly endedSQL * Plus不會執行該SQL開發者

然後我複製&將腳本粘貼到SQL Developer工作表窗口中,點擊運行按鈕,腳本執行時沒有任何問題/錯誤。

長時間調查後,我來到認爲,SQL * Plus有一些空格(包括換行符和製表符)的一個問題,它不明白。

因爲我認爲SQL Developer知道如何擺脫奇怪的空格,我試過這個:將腳本粘貼到SQL Developer工作表窗口中,然後從那裏複製並粘貼回SQL腳本。這解決了一些文件的問題,但不是所有的文件。有些文件不會在沒有明顯原因的地方顯示錯誤。

你有沒有過這樣的問題嗎?我應該怎麼做才能通過命令行通過SQL * Plus運行這些腳本?

UPDATE:

一個腳本,沒有使用SQL * Plus的工作,但做了與SQL開發工作的一個例子:

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(出於某種原因,在出現此錯誤的所有文件中,錯誤出現在最後一行之前結論分號。)

+1

你可以添加一個腳本,不工作的(最好是小)的例子嗎? –

+0

@Mark J. Bobak:請參閱上面的** UPDATE **。 – rapt

回答

17

刪除空行。
在sqlplus中,一個空行意味着停止前面的語句並開始一個新的語句。

,或者你可以設置空行:

set sqlbl on 
+1

+1,我知道空行,但不是關於配置設置。 –

+2

哈利路亞!你救了我的一天!你擊中了頭部。非常感謝! – rapt