@@ -20,6 +20,9 @@ create or replace package body ut is
2020 g_nls_date_format varchar2(4000);
2121 gc_fail_on_errors constant boolean := false;
2222
23+ g_result_line_no binary_integer;
24+ g_result_lines ut_varchar2_list := ut_varchar2_list();
25+
2326 function version return varchar2 is
2427 begin
2528 return ut_runner.version();
@@ -164,6 +167,31 @@ create or replace package body ut is
164167 rollback;
165168 end;
166169
170+ function get_report_outputs( a_cursor sys_refcursor ) return varchar2 is
171+ l_clob clob;
172+ l_item_type varchar2(32767);
173+ l_result varchar2(4000);
174+ begin
175+ if g_result_line_no is null then
176+ fetch a_cursor into l_clob, l_item_type;
177+ if a_cursor%notfound then
178+ close a_cursor;
179+ g_result_line_no := null;
180+ g_result_lines := ut_varchar2_list();
181+ raise_if_packages_invalidated();
182+ raise no_data_found;
183+ end if;
184+ g_result_lines := ut_utils.clob_to_table(l_clob, ut_utils.gc_max_storage_varchar2_len);
185+ g_result_line_no := g_result_lines.first;
186+ end if;
187+
188+ if g_result_line_no is not null then
189+ l_result := g_result_lines(g_result_line_no);
190+ g_result_line_no := g_result_lines.next(g_result_line_no);
191+ end if;
192+ return l_result;
193+ end;
194+
167195 function run(
168196 a_reporter ut_reporter_base := null,
169197 a_color_console integer := 0,
@@ -175,10 +203,7 @@ create or replace package body ut is
175203 a_client_character_set varchar2 := null
176204 ) return ut_varchar2_rows pipelined is
177205 l_reporter ut_reporter_base := a_reporter;
178- l_data sys_refcursor;
179- l_clob clob;
180- l_item_type varchar2(32767);
181- l_lines ut_varchar2_list;
206+ l_results sys_refcursor;
182207 begin
183208 run_autonomous(
184209 ut_varchar2_list(),
@@ -192,18 +217,11 @@ create or replace package body ut is
192217 a_client_character_set
193218 );
194219 if l_reporter is of (ut_output_reporter_base) then
195- l_data := treat(l_reporter as ut_output_reporter_base).get_lines_cursor();
220+ l_results := treat(l_reporter as ut_output_reporter_base).get_lines_cursor();
196221 loop
197- fetch l_data into l_clob, l_item_type;
198- exit when l_data%notfound;
199- l_lines := ut_utils.clob_to_table(l_clob, ut_utils.gc_max_storage_varchar2_len);
200- for i in 1 .. l_lines.count loop
201- pipe row(l_lines(i));
202- end loop;
222+ pipe row( get_report_outputs( l_results ) );
203223 end loop;
204- close l_data;
205224 end if;
206- raise_if_packages_invalidated();
207225 return;
208226 end;
209227
@@ -218,10 +236,7 @@ create or replace package body ut is
218236 a_client_character_set varchar2 := null
219237 ) return ut_varchar2_rows pipelined is
220238 l_reporter ut_reporter_base := a_reporter;
221- l_data sys_refcursor;
222- l_clob clob;
223- l_item_type varchar2(32767);
224- l_lines ut_varchar2_list;
239+ l_results sys_refcursor;
225240 begin
226241 run_autonomous(
227242 ut_varchar2_list(),
@@ -235,18 +250,11 @@ create or replace package body ut is
235250 a_client_character_set
236251 );
237252 if l_reporter is of (ut_output_reporter_base) then
238- l_data := treat(l_reporter as ut_output_reporter_base).get_lines_cursor();
253+ l_results := treat(l_reporter as ut_output_reporter_base).get_lines_cursor();
239254 loop
240- fetch l_data into l_clob, l_item_type;
241- exit when l_data%notfound;
242- l_lines := ut_utils.clob_to_table(l_clob, ut_utils.gc_max_storage_varchar2_len);
243- for i in 1 .. l_lines.count loop
244- pipe row(l_lines(i));
245- end loop;
255+ pipe row( get_report_outputs( l_results ) );
246256 end loop;
247- close l_data;
248257 end if;
249- raise_if_packages_invalidated();
250258 return;
251259 end;
252260
@@ -262,10 +270,7 @@ create or replace package body ut is
262270 a_client_character_set varchar2 := null
263271 ) return ut_varchar2_rows pipelined is
264272 l_reporter ut_reporter_base := a_reporter;
265- l_data sys_refcursor;
266- l_clob clob;
267- l_item_type varchar2(32767);
268- l_lines ut_varchar2_list;
273+ l_results sys_refcursor;
269274 begin
270275 run_autonomous(
271276 a_paths,
@@ -279,18 +284,11 @@ create or replace package body ut is
279284 a_client_character_set
280285 );
281286 if l_reporter is of (ut_output_reporter_base) then
282- l_data := treat(l_reporter as ut_output_reporter_base).get_lines_cursor();
287+ l_results := treat(l_reporter as ut_output_reporter_base).get_lines_cursor();
283288 loop
284- fetch l_data into l_clob, l_item_type;
285- exit when l_data%notfound;
286- l_lines := ut_utils.clob_to_table(l_clob, ut_utils.gc_max_storage_varchar2_len);
287- for i in 1 .. l_lines.count loop
288- pipe row(l_lines(i));
289- end loop;
289+ pipe row( get_report_outputs( l_results ) );
290290 end loop;
291- close l_data;
292291 end if;
293- raise_if_packages_invalidated();
294292 return;
295293 end;
296294
@@ -306,10 +304,7 @@ create or replace package body ut is
306304 a_client_character_set varchar2 := null
307305 ) return ut_varchar2_rows pipelined is
308306 l_reporter ut_reporter_base := a_reporter;
309- l_data sys_refcursor;
310- l_clob clob;
311- l_item_type varchar2(32767);
312- l_lines ut_varchar2_list;
307+ l_results sys_refcursor;
313308 begin
314309 run_autonomous(
315310 a_paths,
@@ -323,18 +318,11 @@ create or replace package body ut is
323318 a_client_character_set
324319 );
325320 if l_reporter is of (ut_output_reporter_base) then
326- l_data := treat(l_reporter as ut_output_reporter_base).get_lines_cursor();
321+ l_results := treat(l_reporter as ut_output_reporter_base).get_lines_cursor();
327322 loop
328- fetch l_data into l_clob, l_item_type;
329- exit when l_data%notfound;
330- l_lines := ut_utils.clob_to_table(l_clob, ut_utils.gc_max_storage_varchar2_len);
331- for i in 1 .. l_lines.count loop
332- pipe row(l_lines(i));
333- end loop;
323+ pipe row( get_report_outputs( l_results ) );
334324 end loop;
335- close l_data;
336325 end if;
337- raise_if_packages_invalidated();
338326 return;
339327 end;
340328
@@ -349,11 +337,8 @@ create or replace package body ut is
349337 a_exclude_objects ut_varchar2_list := null,
350338 a_client_character_set varchar2 := null
351339 ) return ut_varchar2_rows pipelined is
352- l_reporter ut_reporter_base := a_reporter;
353- l_data sys_refcursor;
354- l_clob clob;
355- l_item_type varchar2(32767);
356- l_lines ut_varchar2_list;
340+ l_reporter ut_reporter_base := a_reporter;
341+ l_results sys_refcursor;
357342 begin
358343 run_autonomous(
359344 ut_varchar2_list(a_path),
@@ -367,18 +352,11 @@ create or replace package body ut is
367352 a_client_character_set
368353 );
369354 if l_reporter is of (ut_output_reporter_base) then
370- l_data := treat(l_reporter as ut_output_reporter_base).get_lines_cursor();
355+ l_results := treat(l_reporter as ut_output_reporter_base).get_lines_cursor();
371356 loop
372- fetch l_data into l_clob, l_item_type;
373- exit when l_data%notfound;
374- l_lines := ut_utils.clob_to_table(l_clob, ut_utils.gc_max_storage_varchar2_len);
375- for i in 1 .. l_lines.count loop
376- pipe row(l_lines(i));
377- end loop;
357+ pipe row( get_report_outputs( l_results ) );
378358 end loop;
379- close l_data;
380359 end if;
381- raise_if_packages_invalidated();
382360 return;
383361 end;
384362
@@ -394,10 +372,7 @@ create or replace package body ut is
394372 a_client_character_set varchar2 := null
395373 ) return ut_varchar2_rows pipelined is
396374 l_reporter ut_reporter_base := a_reporter;
397- l_data sys_refcursor;
398- l_clob clob;
399- l_item_type varchar2(32767);
400- l_lines ut_varchar2_list;
375+ l_results sys_refcursor;
401376 begin
402377 run_autonomous(
403378 ut_varchar2_list(a_path),
@@ -411,18 +386,11 @@ create or replace package body ut is
411386 a_client_character_set
412387 );
413388 if l_reporter is of (ut_output_reporter_base) then
414- l_data := treat(l_reporter as ut_output_reporter_base).get_lines_cursor();
389+ l_results := treat(l_reporter as ut_output_reporter_base).get_lines_cursor();
415390 loop
416- fetch l_data into l_clob, l_item_type;
417- exit when l_data%notfound;
418- l_lines := ut_utils.clob_to_table(l_clob, ut_utils.gc_max_storage_varchar2_len);
419- for i in 1 .. l_lines.count loop
420- pipe row(l_lines(i));
421- end loop;
391+ pipe row( get_report_outputs( l_results ) );
422392 end loop;
423- close l_data;
424393 end if;
425- raise_if_packages_invalidated();
426394 return;
427395 end;
428396
0 commit comments