You were true Stefan
I's fully the bug you quoted
SQL> select count(1) from DBA_TAB_MODIFICATIONS;
COUNT(1)
414
SQL> select * from DBA_TAB_MODIFICATIONS;
no rows selected
I've tested changing the predicate order (underlined in yellow) as said in the here under MOC Kb and it works...
SQL> select u.name, o.name, null, null,
2 m.inserts, m.updates, m.deletes, m.timestamp,
3 decode(bitand(m.flags,1),1,'YES','NO'),
4 m.drop_segments
5 from sys.mon_mods_all$ m, sys.obj$ o, sys.tab$ t, sys.user$ u
6 where o.obj# = m.obj# and o.obj# = t.obj# and o.owner# = u.user#
7 union all
8 select u.name, o.name, o.subname, null,
9 m.inserts, m.updates, m.deletes, m.timestamp,
10 decode(bitand(m.flags,1),1,'YES','NO'),
11 m.drop_segments
12 from sys.mon_mods_all$ m, sys.obj$ o, sys.user$ u
13 where o.owner# = u.user# and o.obj# = m.obj# and o.type#=19
14 union all
15 select u.name, o.name, o2.subname, o.subname,
16 m.inserts, m.updates, m.deletes, m.timestamp,
17 decode(bitand(m.flags,1),1,'YES','NO'),
18 m.drop_segments
19 from sys.mon_mods_all$ m, sys.obj$ o, sys.tabsubpart$ tsp, sys.obj$ o2,
20 sys.user$ u
21 where o.obj# = m.obj# and o.owner# = u.user# and o.obj# = tsp.obj# and o2.obj# = tsp.pobj#;
no rows selected
SQL> select u.name, o.name, null, null,
2 m.inserts, m.updates, m.deletes, m.timestamp,
3 decode(bitand(m.flags,1),1,'YES','NO'),
4 m.drop_segments
5 from sys.mon_mods_all$ m, sys.obj$ o, sys.tab$ t, sys.user$ u
6 where o.obj# = m.obj# and o.obj# = t.obj# and o.owner# = u.user#
7 union all
8 select u.name, o.name, o.subname, null,
9 m.inserts, m.updates, m.deletes, m.timestamp,
10 decode(bitand(m.flags,1),1,'YES','NO'),
11 m.drop_segments
12 from sys.mon_mods_all$ m, sys.obj$ o, sys.user$ u
13 where o.obj# = m.obj# and o.owner# = u.user# and o.type#=19
14 union all
15 select u.name, o.name, o2.subname, o.subname,
16 m.inserts, m.updates, m.deletes, m.timestamp,
17 decode(bitand(m.flags,1),1,'YES','NO'),
18 m.drop_segments
19 from sys.mon_mods_all$ m, sys.obj$ o, sys.tabsubpart$ tsp, sys.obj$ o2,
20 sys.user$ u
21 where o.obj# = m.obj# and o.obj# = tsp.obj# and o2.obj# = tsp.pobj# and o.owner# = u.user#;
414 rows selected.
So I will set the parameter "_optimizer_join_factorization"=false to fix this issue.
Thanks a lot for your help !
Best regards
13984324 wrong result with UNION ALL of similar queries / in DBA_TAB_MODIFICATIONS
Affects:
Product (Component) | Oracle Server (Rdbms) |
Range of versions believed to be affected | Versions >= 11.2 but BELOW 12.1 |
Versions confirmed as being affected | |
Platforms affected | Generic (all / most platforms affected) |
|
|
Fixed:
This issue is fixed in |
Wrong result are possible with :
1) at least 3 branches in UNION ALL
2) at least 2 join factorization predicates
3) Predicate order in branches is different
4) Correct result with "_optimizer_join_factorization"=false;