11

私は非常に厄介な問題に直面しています。私は(Notepad ++で)いくつかのSQLスクリプトを書きました。SQL * Plusで(Windows 7ではコマンドラインから)実行しようとすると、のようなエラーが発生しORA-00933: SQL command not properly endedます。

次に、スクリプトをコピーしてSQL Developerワークシートウィンドウに貼り付け、[実行]ボタンを押すと、スクリプトは問題/エラーなしで実行されます。

長い調査の結果、SQL * Plusには、理解できない空白(改行文字やタブを含む)に問題があると思いました。

SQL Developerは奇妙な空白を取り除く方法を知っていると思うので、これを試しました。スクリプトをSQL Developerワークシートウィンドウに貼り付け、そこからコピーしてSQLスクリプトに貼り付けます。これで一部のファイルの問題は解決しましたが、すべてのファイルでは解決しませんでした。一部のファイルは、明らかな理由もなく、場所によってエラーを表示し続けます。

この問題が発生したことはありますか?コマンドラインからSQL*Plusでこれらのスクリプトを実行できるようにするにはどうすればよいですか?

アップデート:

SQL * Plusでは機能しなかったが、SQLDeveloperでは機能したスクリプトの例:

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(このエラーが発生するすべてのファイルで何らかの理由で、エラーは最後のセミコロンの前の最後の行に表示されます)。

4

2 に答える 2

25

空の行を削除します。
sqlplusでは、空の行は前のステートメントを停止して新しいステートメントを開始することを意味します。

または、空白行を設定できます。

set sqlbl on
于 2012-05-02T05:17:46.363 に答える
0

または、sqldeveloperの「CtrlF7」を使用してスクリプトをフォーマットすることもできます。同様の問題が発生し、空白などを削除しようとしましたが、明らかに何かが欠けていました。Ctrl F7関数が見つかり、スクリプトが機能しました。

于 2019-08-14T00:38:14.803 に答える