2012-05-02 12 views
8

Sono di fronte a un problema molto fastidioso. Ho scritto (in Notepad ++) alcuni script SQL. Ora quando provo a eseguirli tramite SQL * Plus (tramite la riga di comando, su Windows 7), ricevo errori come ORA-00933: SQL command not properly ended.SQL * Plus non esegue script SQL che SQL Developer fa

Quindi copiare & incollare lo script nella finestra del foglio di lavoro di SQL Developer, premere il pulsante Esegui e lo script viene eseguito senza problemi/errori.

Dopo una lunga indagine, ho iniziato a pensare che SQL * Plus abbia un problema con alcuni spazi bianchi (inclusi i caratteri di nuova riga e le schede) che non capisce.

Poiché presumo che SQL Developer sappia come sbarazzarsi degli strani spazi bianchi, ho provato questo: incollare lo script nella finestra del foglio di lavoro di SQL Developer, quindi copiarlo da lì e incollarlo di nuovo nello script SQL. Questo ha risolto il problema per alcuni file, ma non per tutti i file. Alcuni file continuano a mostrare errori in luoghi senza una ragione apparente.

Hai mai avuto questo problema? Cosa devo fare per essere in grado di eseguire questi script tramite SQL * Plus tramite la riga di comando?

UPDATE:

Un esempio di uno script che non ha funzionato con SQL * Plus, ma ha fatto il lavoro con 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 

; 

L'errore che ottengo:

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 

Come vedi l'errore è (SELECT (LEVEL-1)+0 IS_ACTIVE FROM DUAL CONNECT BY LEVEL<=2) B (per qualche motivo in tutti i file che ottengono questo errore, l'errore appare sull'ultima riga prima il punto e virgola conclusivo.)

+1

si può aggiungere una (preferibilmente piccolo) esempio di uno script che non funziona? –

+0

@ Mark J. Bobak: vedere ** AGGIORNAMENTO ** sopra. – rapt

risposta

17

Rimuovere le righe vuote.
In sqlplus una riga vuota significa interrompere l'istruzione precedente e avviarne una nuova.

oppure è possibile impostare righe vuote:

set sqlbl on 
+1

+1, sapevo delle righe vuote, ma non delle impostazioni di configurazione. –

+2

Alleluia !!! Mi hai salvato la giornata! Hai centrato l'unghia sulla testa. Grazie mille! – rapt