-1

UTL_FILE を使用してプロシージャを作成しました。

CREATE OR REPLACE PROCEDURE UTL_CREATE_FILE 
(
       output_file in  UTL_FILE.file_type,
       log_file    in UTL_FILE.file_type,
       filename    in VARCHAR2 (64),
       ddate       in VARCHAR2 (19),
       sep         in NVARCHAR2 (3)

)


  IS

   BEGIN


           sep := Chr(9);
           ddate := TO_CHAR (SYSDATE, 'YYYYMMDD');
           filename := 'EXT' || ddate || '.dat';
           output_file := UTL_FILE.fopen ('C:/home/S/', filename, 'w', 32000);
           log_file := UTL_FILE.fopen ('C:/home/S/', 'WEEKLY.log', 'a', 32000);

           UTL_FILE.put_line (log_file, TO_CHAR (SYSDATE, 'DD-MM-YYYY HH24:MI:SS') || 'Started with file ' || filename);

   select 'HUGE SQL STATEMENT'|| sep || 'Anykey' as OUTLINE from DUAL;
          UTL_FILE.put_line (output_file, OUTLINE);
          UTL_FILE.fclose (output_file);
          UTL_FILE.put_line (log_file, TO_CHAR (SYSDATE, 'DD-MM-YYYY HH24:MI:SS') || 'Finished for file ' || filename);
          UTL_FILE.fclose (log_file);
  END;

しかし、Toad は警告を返します: コンパイル済みですが、コンパイル エラーがあります。

誰でも私を助けることができますか?

その結果、C:/home/S/ ディレクトリで EXT.DAT (およびログ) を受信したいと考えています。前もって感謝します。

4

2 に答える 2

1

TOAD はコンパイル エラーを表示するはずです - それらはおそらく別のタブにあります (その特定の IDE を使用してからしばらく経ちます)。

ただし、ブルマーを 1 つ見つけるのは簡単です。IN モードで定義されたパラメーターに値を割り当てることはできません。このようなパラメーターの目的は、呼び出しプログラムがそれらの値を割り当てることです。

ddateただし、この場合はandを割り当てる必要があると思うfilenameので、プロシージャの署名から宣言セクションに移動する必要があります。

sepパラメータとして保持しますが、デフォルト値を指定します。

SQL では、1 列が 4000 文字に制限されていることに注意してください。したがって、「HUGE SQL STATEMENT」が 3993 文字を超えると、コードで実行時エラーが発生します。


この種のエラーが発生している場合は、PL/SQL からファイルを書き込む複雑さに慣れていない可能性があります。この以前の私の回答とこのトピックに関するこの回答を読むことをお勧めします。

于 2012-04-09T15:21:20.993 に答える
0

これをスクリプトの最後に追加して、エラーを取得できるはずです (TOAD は使用していませんが、サポートすることを期待しています)。最後の end; の後に続きます。

/
show errors;

私にとって目立ったコンパイルエラー-

  1. パラメータが割り当てられています。これは、「in」パラメータとして不正です。それらは入力には使用されていないようなので、おそらく署名から削除する必要があります。これがコード スニペットであり、条件を満たしている場合
于 2012-04-12T14:29:10.980 に答える