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 回答