2012-05-02 3 views
8

매우 성가신 문제에 직면하고 있습니다. 필자는 메모장에 SQL 스크립트를 작성했습니다. 이제 SQL * Plus (Windows 7의 명령 줄을 통해)를 실행하려고하면 ORA-00933: SQL command not properly ended과 같은 오류가 발생합니다.SQL * Plus는 SQL Developer가 수행하는 SQL 스크립트를 실행하지 않습니다.

그런 다음 &을 복사하여 SQL Developer 워크 시트 창에 붙여넣고 실행 단추를 누르면 스크립트는 아무런 문제/오류없이 실행됩니다.

오랜 조사 끝에 SQL * Plus가 이해하지 못하는 일부 공백 문자 (개행 문자 및 탭 포함)에 문제가 있다고 생각하게되었습니다.

이상한 공백을 없애는 방법을 SQL Developer가 알고 있다고 가정하므로 필자는이 스크립트를 SQL Developer 워크 시트 창에 붙여 넣은 다음 복사하여 SQL 스크립트에 붙여 넣습니다. 일부 파일에서는 문제가 해결되었지만 모든 파일에서는 문제가 해결되지 않았습니다. 일부 파일은 명백한 이유없이 장소에 오류를 표시합니다.

혹시이 문제가 있었습니까? 명령 줄을 통해 SQL * Plus에서이 스크립트를 실행할 수 있으려면 어떻게해야합니까?

UPDATE :

의 SQL * 플러스와 함께 작동하지만, SQL 개발자와 작업하지 않았다 스크립트의 예 :

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 

; 

내가 오류 :

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 

오류가 (SELECT (LEVEL-1)+0 IS_ACTIVE FROM DUAL CONNECT BY LEVEL<=2) B에 있습니다 (어떤 이유로이 오류가 발생하는 모든 파일에서 오류는 이전에 마지막 행에 나타납니다) 결론 세미콜론.)

+1

당신이 작동하지 않는 스크립트의 (바람직하게는 작은) 예를 추가 할 수 있습니까? –

+0

@ Mark J. Bobak : 위의 ** 업데이트 **를 참조하십시오. – rapt

답변

17

빈 줄을 제거하십시오.
sqlplus에서 빈 줄은 이전 명령문을 중지하고 새 명령문을 시작한다는 것을 의미합니다.

또는 당신은 빈 줄 설정할 수 있습니다

set sqlbl on 
+1

+1, 빈 줄에 대해서는 알았지 만 구성 설정에 대해서는 알지 못했습니다. –

+2

할렐루야! 너는 나의 하루를 구했다! 당신은 머리에 못을 박았습니다. 정말 고맙습니다! – rapt

관련 문제