如何找到 dbms_output.put_line() 的替代方法,以便每次在每次迭代中调用它时逐行打印内容?

How to find a dbms_output.put_line() alternative to print contents line by line every time when it gets called in every iteration?

我想在程序处理某些记录时查看输出。读取该行无济于事,因为它只是从缓冲区中检索,没有其他内容。例如:

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 的 command/setting,我可以使用它来查看已处理的 % 并在每次迭代中打印要处理的行,而不是在最后作为缓冲区中持久存在的一整行行(当调用 "dbms_output.put_line" 时,打印的行必须显示 PL/SQL 中的每个准确时间,而不是执行结束时的 500 行)??

    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;
/ 

--在命令 window :

上执行以下语句
SQL >set arraysize 1 

SQL > SELECT * FROM TABLE(test_pipe);