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

Skip to content

Commit a51dbff

Browse files
committed
put serveroutput and error stack/backtrace to ut-executable
1 parent e023d9e commit a51dbff

2 files changed

Lines changed: 33 additions & 11 deletions

File tree

source/core/types/ut_executable.tpb

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -69,22 +69,20 @@ create or replace type body ut_executable is
6969
return ut_metadata.form_name(owner_name, object_name, procedure_name);
7070
end;
7171

72-
member procedure do_execute(self in ut_executable, a_item in out nocopy ut_suite_item, a_listener in out nocopy ut_event_listener_base) is
72+
member procedure do_execute(self in out nocopy ut_executable, a_item in out nocopy ut_suite_item, a_listener in out nocopy ut_event_listener_base) is
7373
l_completed_without_errors boolean;
7474
begin
7575
l_completed_without_errors := self.do_execute(a_item, a_listener);
7676
end do_execute;
7777

78-
member function do_execute(self in ut_executable, a_item in out nocopy ut_suite_item, a_listener in out nocopy ut_event_listener_base) return boolean is
78+
member function do_execute(self in out nocopy ut_executable, a_item in out nocopy ut_suite_item, a_listener in out nocopy ut_event_listener_base) return boolean is
7979
l_statement varchar2(4000);
8080
l_status number;
8181
l_cursor_number number;
8282
l_owner varchar2(200) := self.owner_name;
8383
l_object_name varchar2(200) := self.object_name;
8484
l_procedure_name varchar2(200) := self.procedure_name;
8585

86-
l_error_stack varchar2(32767);
87-
l_error_backtrace varchar2(32767);
8886
l_completed_without_errors boolean := true;
8987

9088
function process_errors_from_call(a_error_stack varchar2, a_error_backtrace varchar2) return boolean is
@@ -98,6 +96,25 @@ create or replace type body ut_executable is
9896
return true;
9997
end if;
10098
end;
99+
100+
procedure save_dbms_output is
101+
l_status number;
102+
l_line varchar2(32767);
103+
begin
104+
dbms_lob.createtemporary(self.serveroutput, true, dur => dbms_lob.session);
105+
106+
loop
107+
dbms_output.get_line(line => l_line, status => l_status);
108+
exit when l_status = 1;
109+
110+
dbms_lob.writeappend(lob_loc => self.serveroutput,
111+
amount => length(l_line),
112+
buffer => l_line);
113+
dbms_lob.writeappend(lob_loc => self.serveroutput,
114+
amount => 1,
115+
buffer => chr(10));
116+
end loop;
117+
end save_dbms_output;
101118
begin
102119
if self.is_defined() then
103120
--listener - before call to executable
@@ -129,15 +146,17 @@ create or replace type body ut_executable is
129146

130147
l_cursor_number := dbms_sql.open_cursor;
131148
dbms_sql.parse(l_cursor_number, statement => l_statement, language_flag => dbms_sql.native);
132-
dbms_sql.bind_variable(l_cursor_number, 'a_error_stack', l_error_stack, 32767);
133-
dbms_sql.bind_variable(l_cursor_number, 'a_error_backtrace', l_error_backtrace, 32767);
149+
dbms_sql.bind_variable(l_cursor_number, 'a_error_stack', to_char(null), 32767);
150+
dbms_sql.bind_variable(l_cursor_number, 'a_error_backtrace', to_char(null), 32767);
134151

135152
l_status := dbms_sql.execute(l_cursor_number);
136-
dbms_sql.variable_value(l_cursor_number, 'a_error_stack', l_error_stack);
137-
dbms_sql.variable_value(l_cursor_number, 'a_error_backtrace', l_error_backtrace);
153+
dbms_sql.variable_value(l_cursor_number, 'a_error_stack', self.error_stack);
154+
dbms_sql.variable_value(l_cursor_number, 'a_error_backtrace', self.error_backtrace);
138155
dbms_sql.close_cursor(l_cursor_number);
156+
157+
save_dbms_output;
139158

140-
l_completed_without_errors := process_errors_from_call(l_error_stack, l_error_backtrace);
159+
l_completed_without_errors := process_errors_from_call(self.error_stack, self.error_backtrace);
141160

142161
a_listener.fire_after_event(self.associated_event_name, a_item);
143162
--listener - after call to executable

source/core/types/ut_executable.tps

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,19 @@ create or replace type ut_executable force authid current_user as object(
2222
owner_name varchar2(250 char),
2323
object_name varchar2(250 char),
2424
procedure_name varchar2(250 char),
25+
error_backtrace varchar2(4000),
26+
error_stack varchar2(4000),
27+
serveroutput clob,
2528
constructor function ut_executable( self in out nocopy ut_executable, a_context ut_suite_item, a_procedure_name varchar2, a_associated_event_name varchar2) return self as result,
2629
member function is_valid return boolean,
2730
member function is_defined return boolean,
2831
member function form_name return varchar2,
29-
member procedure do_execute(self in ut_executable, a_item in out nocopy ut_suite_item, a_listener in out nocopy ut_event_listener_base),
32+
member procedure do_execute(self in out nocopy ut_executable, a_item in out nocopy ut_suite_item, a_listener in out nocopy ut_event_listener_base),
3033
/**
3134
* executes the defines executable
3235
* returns true if executed without exceptions
3336
* returns false if exceptions were raised
3437
*/
35-
member function do_execute(self in ut_executable, a_item in out nocopy ut_suite_item, a_listener in out nocopy ut_event_listener_base) return boolean
38+
member function do_execute(self in out nocopy ut_executable, a_item in out nocopy ut_suite_item, a_listener in out nocopy ut_event_listener_base) return boolean
3639
) final
3740
/

0 commit comments

Comments
 (0)