O SQL * Plus não executa scripts SQL que o SQL Developer faz
Estou enfrentando um problema muito chato. Eu escrevi (no Notepad ++) alguns scripts SQL. Agora, quando eu tento executá-los pelo SQL * Plus (através da linha de comando, no Windows 7), estou recebendo erros comoORA-00933: SQL command not properly ended
.
Em seguida, copio e colo o script na janela da planilha do SQL Developer, clico no botão Executar e o script é executado sem nenhum problema / erro.
Depois de uma longa investigação, cheguei a pensar que o SQL * Plus tem um problema com alguns espaços em branco (incluindo caracteres de nova linha e guias) que ele não entende.
Como suponho que o SQL Developer saiba como se livrar dos espaços em branco estranhos, tentei fazer isso: cole o script na janela de planilha do SQL Developer, copie-o e cole-o novamente no script SQL. Isso resolveu o problema de alguns arquivos, mas não de todos os arquivos. Alguns arquivos continuam mostrando erros em locais sem nenhum motivo aparente.
Você já teve esse problema? O que devo fazer para poder executar esses scripts pelo SQL * Plus através da linha de comando?
ATUALIZAR:
Um exemplo de um script que não funcionou com o SQL * Plus, mas funcionou com o 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>
O erro que recebo:
<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>
Como você vê o erro está ligado(SELECT (LEVEL-1)+0 IS_ACTIVE FROM DUAL CONNECT BY LEVEL<=2) B
(Por algum motivo, em todos os arquivos que recebem este erro, o erro aparece na última linha antes do ponto e vírgula final.)