2012-05-02 4 views
8

У меня возникла очень неприятная проблема. Я написал (в Notepad ++) некоторые SQL-скрипты. Теперь, когда я пытаюсь выполнить их с помощью SQL * Plus (через командную строку, в Windows 7), я получаю ошибки, такие как ORA-00933: SQL command not properly ended.SQL * Plus не выполняет SQL-скрипты, которые выполняет SQL Developer

Затем я копирую &. Вставьте скрипт в окно рабочего листа SQL Developer, нажмите кнопку «Запустить», и скрипт будет выполнен без каких-либо проблем/ошибок.

После долгих исследований я пришел к выводу, что SQL * Plus имеет проблемы с некоторыми пробелами (включая символы новой строки и вкладки), которые он не понимает.

Поскольку я предполагаю, что разработчик SQL знает, как избавиться от странных пробелов, я пробовал это: вставьте скрипт в окно рабочего листа SQL Developer, затем скопируйте его и вставьте его обратно в сценарий SQL. Это решило проблему для некоторых файлов, но не для всех файлов. Некоторые файлы продолжают показывать ошибки в местах без видимых причин.

У вас когда-нибудь была эта проблема? Что мне делать, чтобы запустить эти скрипты с помощью SQL * Plus через командную строку?

UPDATE:

Пример сценария, который не работал с 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 (по какой-то причине во всех файлах, которые получают эту ошибку, ошибка появляется на последней строке перед завершающая точка с запятой.)

+1

Вы можете добавить (предпочтительно) небольшой пример сценария, который не работает? –

+0

@Mark J. Bobak: См. ** ОБНОВЛЕНИЕ ** выше. – rapt

ответ

17

Удалить пустые строки.
В sqlplus пустая строка означает остановку предыдущего утверждения и запуск нового.

или вы можете установить пустые строки:

set sqlbl on 
+1

+1, я знал о пустых строках, но не о настройке конфигурации. –

+2

Аллилуйя !!! Ты спас мой день! Вы ударили ноготь по голове. Спасибо огромное! – rapt

Смежные вопросы