11create or replace type body ut_executable is
22
3- static function execute_call(a_owner varchar2, a_object varchar2, a_procedure_name varchar2) return varchar2 is
3+ static procedure execute_call(
4+ a_owner varchar2, a_object varchar2, a_procedure_name varchar2,
5+ a_error_stack out nocopy varchar2, a_error_backtrace out nocopy varchar2
6+ ) is
47 l_statement varchar2(4000);
58 l_status number;
69 l_cursor_number number;
7- l_error_stack varchar2(4000);
810 l_owner varchar2(200) := a_owner;
911 l_object_name varchar2(200) := a_object;
1012 l_procedure_name varchar2(200) := a_procedure_name;
@@ -15,7 +17,8 @@ create or replace type body ut_executable is
1517
1618 l_statement :=
1719 'declare' || chr(10) ||
18- ' l_error_stack varchar2(4000);' || chr(10) ||
20+ ' l_error_stack varchar2(32767);' || chr(10) ||
21+ ' l_error_backtrace varchar2(32767);' || chr(10) ||
1922 'begin' || chr(10) ||
2023 ' begin' || chr(10) ||
2124 ' ' || ut_metadata.form_name(l_owner, l_object_name, l_procedure_name) || ';' || chr(10) ||
@@ -25,22 +28,24 @@ create or replace type body ut_executable is
2528 ' if sqlcode = -04068 then' || chr(10) ||
2629 ' raise;' || chr(10) ||
2730 ' end if;' || chr(10) ||
28- ' l_error_stack := dbms_utility.format_error_stack || dbms_utility.format_error_backtrace;' || chr(10) ||
31+ ' l_error_stack := dbms_utility.format_error_stack;' || chr(10) ||
32+ ' l_error_backtrace := dbms_utility.format_error_backtrace;' || chr(10) ||
2933 ' end;' || chr(10) ||
30- ' :l_error_stack := l_error_stack;' || chr(10) ||
34+ ' :a_error_stack := l_error_stack;' || chr(10) ||
35+ ' :a_error_backtrace := l_error_backtrace;' || chr(10) ||
3136 'end;';
3237
3338 ut_utils.debug_log('ut_executable.execute_call l_statement: ' || l_statement);
3439
35-
3640 l_cursor_number := dbms_sql.open_cursor;
3741 dbms_sql.parse(l_cursor_number, statement => l_statement, language_flag => dbms_sql.native);
38- dbms_sql.bind_variable(l_cursor_number, 'l_error_stack', l_error_stack, 8000);
42+ dbms_sql.bind_variable(l_cursor_number, 'a_error_stack', a_error_stack, 32767);
43+ dbms_sql.bind_variable(l_cursor_number, 'a_error_backtrace', a_error_backtrace, 32767);
44+
3945 l_status := dbms_sql.execute(l_cursor_number);
40- dbms_sql.variable_value(l_cursor_number, 'l_error_stack', l_error_stack);
46+ dbms_sql.variable_value(l_cursor_number, 'a_error_stack', a_error_stack);
47+ dbms_sql.variable_value(l_cursor_number, 'a_error_backtrace', a_error_backtrace);
4148 dbms_sql.close_cursor(l_cursor_number);
42-
43- return rtrim(l_error_stack,chr(10));
4449 end;
4550
4651 member function is_valid(a_proc_type varchar2) return boolean is
@@ -80,14 +85,15 @@ create or replace type body ut_executable is
8085 end;
8186
8287 member procedure do_execute(self in ut_executable) is
83- l_exception_stack varchar2(32767);
88+ l_error_stack varchar2(32767);
89+ l_error_backtrace varchar2(32767);
8490 begin
85- l_exception_stack := do_execute();
91+ do_execute(l_error_stack, l_error_backtrace );
8692 end do_execute;
8793
88- member function do_execute(self in ut_executable) return varchar2 is
94+ member procedure do_execute(self in ut_executable, a_error_stack out nocopy varchar2, a_error_backtrace out nocopy varchar2) is
8995 begin
90- return ut_executable.execute_call(self.owner_name, self.object_name, self.procedure_name);
96+ ut_executable.execute_call(self.owner_name, self.object_name, self.procedure_name, a_error_stack, a_error_backtrace );
9197 end do_execute;
9298
9399end;
0 commit comments