Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Bugfix/dbms output capture before run #686

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
May 31, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 8 additions & 7 deletions source/core/ut_utils.pkb
Original file line number Diff line number Diff line change
Expand Up @@ -437,28 +437,29 @@ 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
dbms_output.get_line(line => l_line, status => l_status);
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;

Expand Down
22 changes: 16 additions & 6 deletions test/api/test_ut_runner.pkb
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down