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.)
można dodać (najlepiej małe) Przykład skryptu, który nie działa? –
@ Mark J. Bobak: Proszę zobaczyć ** UPDATE ** powyżej. – rapt