@@ -160,6 +160,8 @@ create or replace type body ut_cursor_details as
160160
161161 member procedure filter_columns(self in out nocopy ut_cursor_details, a_match_options ut_matcher_options) is
162162 l_result ut_cursor_details := self;
163+ l_column_tab ut_cursor_column_tab := ut_cursor_column_tab();
164+ l_column ut_cursor_column;
163165 c_xpath_extract_reg constant varchar2(50) := '^((/ROW/)|^(//)|^(/\*/))?(.*)';
164166 begin
165167 if l_result.cursor_columns_info is not null then
@@ -194,6 +196,22 @@ create or replace type body ut_cursor_details as
194196 select 1 from excluded_columns f where regexp_like( '/'||x.access_path, '^/?'||f.col_names||'($|/.*)' )
195197 );
196198 end if;
199+
200+ --Rewrite column order after columns been excluded
201+ for i in (
202+ select parent_name, access_path, display_path, has_nested_col,
203+ transformed_name, hierarchy_level,
204+ row_number() over (partition by parent_name,transformed_name order by column_position) as new_position, xml_valid_name,
205+ column_name, column_type, column_type_name, column_schema,
206+ column_len, column_precision ,column_scale ,is_sql_diffable, is_collection,value(x) col_info
207+ from table(l_result.cursor_columns_info) x) loop
208+ l_column := i.col_info;
209+ l_column.column_position := i.new_position;
210+ l_column_tab.extend;
211+ l_column_tab(l_column_tab.last) := l_column;
212+ end loop;
213+
214+ l_result.cursor_columns_info := l_column_tab;
197215 self := l_result;
198216 end if;
199217 end;
0 commit comments