3

PL/SQL ブロックがあり、テーブル関数からクエリを実行し、カーソルを使用してレコードごとに処理し、いくつかのビジネス ロジックを持ち、最終的に修飾レコードをファイルに書き込みます。

処理件数は100万件までです。また、合計処理速度は、1 分あたり約 10000 レコードです。 (少数のデータ チャンクでテストした後)

ここで、別の環境である JSP での処理状況を示す必要があります。

DECLARE
 vSFile   utl_file.file_type;
 vNewLine VARCHAR2(200);
 my_cursor IS SELECT * FROM MYTABLE;
 my_details my_cursor%rowtype;
BEGIN
  vSFile := utl_file.fopen('ORALOAD', file_name,'r');

  IF utl_file.is_open(vSFile) THEN
        utl_file.get_line(vSFile, vNewLine);


        OPEN my_cursor;
        LOOP
               FETCH my_cursor INTO my_details;
               EXIT WHEN sll_cur%NOTFOUND;
               -- Do processing
               utl_file.putf(logfile,'%s ',my_details);
               -- A info tht record completed!
        END LOOP;
        CLOSE logfile;
        CLOSE my_cursor;
  END IF;
EXCEPTION
WHEN OTHERS THEN
    --Error handling
END;
/

ここに書き込まれたログ情報は、処理が完了するまで利用できません。そのため、どこまで完了したか追跡できません。誰かがこれについて私を助けてくれますか?

4

1 に答える 1

4

ファイルにデータを書き込むには、FFLUSH プロシージャを使用する必要があります。例えば:

OPEN my_cursor;
   LOOP
      FETCH my_cursor INTO my_details;
      EXIT WHEN sll_cur%NOTFOUND;
      -- Do processing
      utl_file.putf(logfile,'%s ',my_details);
      -- Call the FFLUSH proc here..And contents are available immediately.
      utl_file.FFLUSH(logfile); 
END LOOP;

ドキュメントから:

FFLUSH保留中のデータを、ファイル ハンドルで識別されるファイルに物理的に書き込みます。通常、ファイルに書き込まれるデータはバッファリングされます。この FFLUSHプロシージャは、バッファリングされたデータを強制的にファイルに書き込みます。データは改行文字で終了する必要があります。

フラッシュは、開いている間にファイルを読み取る必要がある場合に便利です。たとえば、デバッグ メッセージをファイルにフラッシュして、すぐに読み取れるようにすることができます。

詳細についてUTL_FILEは、Oracle ドキュメントを参照してください。

于 2014-01-30T11:53:39.340 に答える