2

私は 2 つの .sql ファイルを持っています。両方とも入力パラメーターを受け取る Oracle ストアド プロシージャです。コマンドラインでsqlplusを使用して最初にリモートOracleデータベースに接続し、最初に両方のファイルを使用してそれぞれのストアドプロシージャを作成したいので、Oracle SQL Developerでその接続のプロシージャの下にそれらを表示します。

この後、次のような .sql ファイルがさらに 2 つ作成され、入力パラメーターを取得してストアド プロシージャを実行するように設計されています。これは、ストアド プロシージャ「REPORT」を実行するためのファイルの 1 つです。

 DECLARE
   NAME VARCHAR2(200);
   VERSION VARCHAR2(200);
   STARTDATE DATE;
   ENDDATE DATE;
BEGIN
   NAME := '&1';
   VERSION := '&2';
   STARTDATE := '&3';
   ENDDATE := '&4';

   exec REPORT(NAME, VERSION, STARTDATE, ENDDATE);
   EXCEPTION
   WHEN OTHERS THEN
   RAISE_APPLICATION_ERROR(-20101,SQLERRM);
   END;
   /

コマンドプロンプトで、最初にデータベースにストアドプロシージャを作成しようとしました: C:\Users\Desktop>sqlplus username/password @report_setup.sql

これを試してみると、.sql ファイルの最後の行よりも 1 大きい番号から番号が付けられた空の行が出力されます。私の report_setup.sql ファイルの長さは 81 行で、sqlplus コマンドの出力は 83 から始まる番号付きの空白の行です。

sqlplus を使用してこれらのストアド プロシージャを適切に作成および実行する方法を教えてください。

前もって感謝します、

4

3 に答える 3

3

「exec」単語を削除する必要があると思います。行の最初の一番下にスラッシュを付け、その前にスペースを入れないことが重要です。

DECLARE
    NAME VARCHAR2(200);
    VERSION VARCHAR2(200);
    STARTDATE DATE;
    ENDDATE DATE;
BEGIN
    NAME := '&1';
    VERSION := '&2';
    STARTDATE := '&3';
    ENDDATE := '&4';

    REPORT(NAME, VERSION, STARTDATE, ENDDATE);
EXCEPTION
    WHEN OTHERS THEN
    RAISE_APPLICATION_ERROR(-20101,SQLERRM);
END;
/
于 2013-07-31T16:21:00.480 に答える