2012-05-02 27 views
8

estoy frente a un problema muy molesto. He escrito (en Notepad ++) algunos scripts SQL. Ahora cuando trato de ejecutarlos por SQL * Plus (a través de la línea de comando, en Windows 7), recibo errores como ORA-00933: SQL command not properly ended.SQL * Plus no ejecuta scripts SQL que SQL Developer hace

Luego copie & pegue la secuencia de comandos en la ventana de la hoja de cálculo de SQL Developer, pulse el botón Ejecutar, y la secuencia de comandos se ejecuta sin ningún problema/error.

Después de una larga investigación, llegué a pensar que SQL * Plus tiene un problema con algunos espacios en blanco (incluyendo caracteres de nueva línea y las pestañas) que no entiende.

Como supongo que SQL Developer sabe cómo deshacerse de los espacios en blanco raros, lo he intentado: pegue el script en la ventana de la hoja de cálculo de SQL Developer, cópielo desde allí y vuelva a pegarlo en el script SQL. Eso resolvió el problema para algunos archivos, pero no para todos. Algunos archivos siguen mostrando errores en lugares sin razón aparente.

¿Alguna vez ha tenido este problema? ¿Qué debo hacer para poder ejecutar estos scripts mediante SQL * Plus a través de la línea de comandos?

ACTUALIZACIÓN:

Un ejemplo de un script que no funciona con SQL * Plus, pero hizo el trabajo 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 

; 

El error que consigo:

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 

Como ve, el error está en (SELECT (LEVEL-1)+0 IS_ACTIVE FROM DUAL CONNECT BY LEVEL<=2) B (por alguna razón en todos los archivos que obtienen este error, el error aparece en la última línea antes el punto y coma final.)

+1

¿Se puede añadir una (preferiblemente pequeñas) ejemplo de un script que no funciona? –

+0

@Mark J. Bobak: Consulte ** ACTUALIZACIÓN ** arriba. – rapt

Respuesta

17

eliminar las líneas vacías.
En sqlplus, una línea vacía significa detener la instrucción anterior e iniciar una nueva.

o puede establecer líneas en blanco:

set sqlbl on 
+1

+1, sabía sobre las líneas en blanco, pero no sobre la configuración. –

+2

Hallelujah !!! ¡Salvaste mi día! Has golpeado el clavo en la cabeza. Muchas gracias! – rapt