Run this in the test window
BEGIN
FOR nn IN 1 .. 10000 LOOP
dbms_output.put_line('#=' || nn);
END LOOP;
END;
And it does this in the background
DECLARE
lines sys.dbms_output.chararr;
BEGIN
:numlines := 10;
sys.dbms_output.get_lines(lines => lines, numlines => :numlines);
IF :numlines > 0 THEN
:line0 := lines(1);
END IF;
IF :numlines > 1 THEN
:line1 := lines(2);
END IF;
IF :numlines > 2 THEN
:line2 := lines(3);
END IF;
IF :numlines > 3 THEN
:line3 := lines(4);
END IF;
IF :numlines > 4 THEN
:line4 := lines(5);
END IF;
IF :numlines > 5 THEN
:line5 := lines(6);
END IF;
IF :numlines > 6 THEN
:line6 := lines(7);
END IF;
IF :numlines > 7 THEN
:line7 := lines(8);
END IF;
IF :numlines > 8 THEN
:line8 := lines(9);
END IF;
IF :numlines > 9 THEN
:line9 := lines(10);
END IF;
END;
Run the same in Oracle SQL Developer
set SERVEROUTPUT ON
BEGIN
FOR nn IN 1 .. 10000 LOOP
dbms_output.put_line('#=' || nn);
END LOOP;
END;
And you will get the output much faster
It does this in the background
DECLARE
l_line VARCHAR2 (32767);
l_done NUMBER;
l_buffer VARCHAR2 (32767) := '';
l_lengthbuffer NUMBER := 0;
l_lengthline NUMBER := 0;
BEGIN
LOOP
DBMS_OUTPUT.get_line (l_line, l_done);
IF (l_buffer IS NULL)
THEN
l_lengthbuffer := 0;
ELSE
l_lengthbuffer := LENGTH (l_buffer);
END IF;
IF (l_line IS NULL)
THEN
l_lengthline := 0;
ELSE
l_lengthline := LENGTH (l_line);
END IF;
EXIT WHEN l_lengthbuffer + l_lengthline > :maxbytes
OR l_lengthbuffer + l_lengthline > 32767
OR l_done = 1;
l_buffer := l_buffer || l_line || CHR (10);
END LOOP;
:done := l_done;
:buffer := l_buffer;
:line := l_line;
END;