У меня возникла очень неприятная проблема. Я написал (в 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
(по какой-то причине во всех файлах, которые получают эту ошибку, ошибка появляется на последней строке перед завершающая точка с запятой.)
Вы можете добавить (предпочтительно) небольшой пример сценария, который не работает? –
@Mark J. Bobak: См. ** ОБНОВЛЕНИЕ ** выше. – rapt