diff --git a/source/core/ut_utils.pkb b/source/core/ut_utils.pkb index 438d32c60..4964848e7 100644 --- a/source/core/ut_utils.pkb +++ b/source/core/ut_utils.pkb @@ -437,17 +437,16 @@ procedure append_to_clob(a_src_clob in out nocopy clob, a_clob_table t_clob_tab, procedure save_dbms_output_to_cache is l_status number; l_line varchar2(32767); - l_line_no integer := 1; + l_offset integer := 0; l_lines ut_varchar2_rows := ut_varchar2_rows(); c_lines_limit constant integer := 100; pragma autonomous_transaction; - procedure flush_lines is + procedure flush_lines(a_lines ut_varchar2_rows, a_offset integer) is begin insert into ut_dbms_output_cache (seq_no,text) - select rownum, column_value - from table(l_lines); - l_lines.delete; + select rownum+a_offset, column_value + from table(a_lines); end; begin loop @@ -455,10 +454,12 @@ procedure append_to_clob(a_src_clob in out nocopy clob, a_clob_table t_clob_tab, exit when l_status = 1; l_lines := l_lines multiset union all ut_utils.convert_collection(ut_utils.clob_to_table(l_line||chr(7),4000)); if l_lines.count > c_lines_limit then - flush_lines(); + flush_lines(l_lines, l_offset); + l_offset := l_offset + l_lines.count; + l_lines.delete; end if; end loop; - flush_lines(); + flush_lines(l_lines, l_offset); commit; end; diff --git a/test/api/test_ut_runner.pkb b/test/api/test_ut_runner.pkb index e957d3719..fa3121bfa 100644 --- a/test/api/test_ut_runner.pkb +++ b/test/api/test_ut_runner.pkb @@ -180,25 +180,35 @@ end;'; procedure run_keep_dbms_output_buffer is l_expected dbmsoutput_linesarray; l_actual dbmsoutput_linesarray; - l_lines number := 100; + l_results ut3.ut_varchar2_list; + l_lines number := 10000; begin --Arrange create_test_spec(); create_test_body(0); + l_expected := dbmsoutput_linesarray( 'A text placed into DBMS_OUTPUT', 'Another line', lpad('A very long line',10000,'a') ); - dbms_output.put_line(l_expected(1)); - dbms_output.put_line(l_expected(2)); - dbms_output.put_line(l_expected(3)); + for i in 1 .. 300 loop + l_expected.extend; + l_expected(l_expected.last) := 'line '||i; + end loop; + + for i in 1 .. l_expected.count loop + dbms_output.put_line(l_expected(i)); + end loop; + --Act - ut3.ut.run('test_cache'); + select * + bulk collect into l_results + from table(ut3.ut.run('test_cache')); --Assert dbms_output.get_lines(lines => l_actual, numlines => l_lines); - for i in 1 .. l_expected.count loop + for i in 1 .. l_lines loop ut.expect(l_actual(i)).to_equal(l_expected(i)); end loop; drop_test_package();