0

プログラムがいくつかのレコードを処理しているときに、出力を表示したいと考えています。行を読み取っても、バッファから取得するだけで他には何もないため、役に立ちません。例えば:

DECLARE
  CURSOR cEmploee IS SELECT * FROM g_emploees;
  iTotal INTEGER := 0;
  iCount INTEGER := 0;
BEGIN
  SELECT COUNT(*) FROM g_emploees INTO iTotal;
  FOR rLine IN cEmploee loop
    dbms_output.put_line('Porcessed['||rLine.id||']: '|| ((iCount/iTotal)*100) || '%')
    iCount := iCount + 1;
  END LOOP;
END;
  1. dbms_output.get_line() を使用できないので、回答済みとしてマークするのはやめてください。
  2. 読み取り専用の理由で出力をファイルにパイプできません!

処理された % を表示し、最後ではなく、すべての反復で処理された行を出力するために使用できる DBMS のコマンド/設定はありますか? 「dbms_output.put_line」が呼び出されたときのPL/SQLの正確な時間は、実行の最後に500行ではありません)??

4

1 に答える 1

2
    CREATE OR REPLACE FUNCTION test_pipe 
    RETURN sys.DBMS_DEBUG_VC2COLL 
    pipelined
    as
    CURSOR cEmploee IS 
    SELECT * FROM g_emploees; 
    iTotal INTEGER := 0; 
    iCount INTEGER := 0; 
    BEGIN 
    SELECT COUNT(*) 
    INTO iTotal
    FROM g_emploees ; 
    FOR rLine IN cEmploee loop 
    PIPE row('Porcessed['||rLine.id||']: '|| ((iCount/iTotal)*100) || '%'); 
    iCount := iCount + 1; 
    END LOOP; 
    END;
/ 

-- 以下のステートメントをコマンド ウィンドウで実行します。

SQL >set arraysize 1 

SQL > SELECT * FROM TABLE(test_pipe);
于 2016-08-24T08:08:23.097 に答える