2012-05-02 11 views
8

Mam do czynienia z bardzo irytującym problemem. Napisałem (w Notepad ++) niektóre skrypty SQL. Teraz, gdy próbuję wykonać je przez SQL * Plus (za pomocą wiersza poleceń, w systemie Windows 7), otrzymuję błędy takie jak ORA-00933: SQL command not properly ended.SQL * Plus nie wykonuje skryptów SQL, które programista SQL ma

Następnie kopiuję & wklejam skrypt do okna arkusza programisty SQL, wciskam przycisk Uruchom, a skrypt wykonuje się bez problemu/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 i znakami nowego wiersza), których nie rozumie.

Ponieważ zakładam, że programista SQL wie, jak pozbyć się dziwnych białych znaków, próbowałem tego: wkleić skrypt do okna skoroszytu programu SQL Developer, a następnie skopiować go i wkleić 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ń?

UPDATE:

Przykładowy skrypt, który nie działa z SQL * Plus, ale wyszło z 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 

; 

Błąd pojawia się:

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 

Jak widać błąd jest na (SELECT (LEVEL-1)+0 IS_ACTIVE FROM DUAL CONNECT BY LEVEL<=2) B (z jakiegoś powodu we wszystkich plikach, które otrzymują ten błąd, błąd pojawia się w ostatnim wierszu przed końcowy średnik.)

+1

można dodać (najlepiej małe) Przykład skryptu, który nie działa? –

+0

@ Mark J. Bobak: Proszę zobaczyć ** UPDATE ** powyżej. – rapt

Odpowiedz

17

Usuń puste wiersze.
W sqlplus pusta linia oznacza zatrzymanie poprzedniej instrukcji i uruchomienie nowej.

lub można ustawić puste wiersze:

set sqlbl on 
+1

+1, wiedziałem o pustych liniach, ale nie o ustawieniach konfiguracyjnych. –

+2

Hallelujah !!! Uratowałeś mój dzień! Uderzyłeś paznokciem w głowę. Dziękuję bardzo! – rapt