SQL * Plus nie wykonuje skryptów SQL, które wykonuje programista SQL
Stoję przed bardzo denerwującym problemem. Napisałem (w Notepad ++) niektóre skrypty SQL. Teraz, gdy próbuję je wykonać za pomocą SQL * Plus (za pomocą wiersza poleceń, w systemie Windows 7), otrzymuję błędy takie jakORA-00933: SQL command not properly ended
.
Następnie kopiuję skrypt i wklejam go do okna arkusza SQL Developer, klikam przycisk Uruchom, a skrypt wykonuje się bez żadnych problemów / błędów.
Po długim dochodzeniu doszedłem do wniosku, że SQL * Plus ma problem z niektórymi białymi znakami (w tym znakami nowej linii i kartami), których nie rozumie.
Ponieważ zakładam, że SQL Developer wie, jak pozbyć się dziwnych białych znaków, spróbowałem tego: wklej skrypt do okna arkusza SQL Developer, a następnie skopiuj go i wklej z powrotem do skryptu SQL. To rozwiązało problem dla niektórych plików, ale nie dla wszystkich plików. Niektóre pliki pokazują błędy w miejscach bez wyraźnego powodu.
Czy kiedykolwiek miałeś ten problem? Co powinienem zrobić, aby móc uruchomić te skrypty przez SQL * Plus za pomocą wiersza poleceń?
AKTUALIZACJA:
Przykład skryptu, który nie działał z SQL * Plus, ale pracował z SQL Developer:
<code>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 ; </code>
Błąd, który otrzymuję:
<code>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 </code>
Jak widzisz, błąd jest włączony(SELECT (LEVEL-1)+0 IS_ACTIVE FROM DUAL CONNECT BY LEVEL<=2) B
(z jakiegoś powodu we wszystkich plikach, w których występuje ten błąd, błąd pojawia się w ostatnim wierszu przed końcowym średnikiem.)