如何找到 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;
- 我无法使用 dbms_output.get_line(),所以停止将其标记为已回答!
- 由于只读原因,我无法将输出通过管道传输到文件!
是否有一个用于 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);
我想在程序处理某些记录时查看输出。读取该行无济于事,因为它只是从缓冲区中检索,没有其他内容。例如:
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;
- 我无法使用 dbms_output.get_line(),所以停止将其标记为已回答!
- 由于只读原因,我无法将输出通过管道传输到文件!
是否有一个用于 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);