Interesting, that SYS_OP_MAP_NONNULL appeared in the Oracle 12c documentation: Choosing Indexes for Materialized Views
Lazy tip: By the way, with length limitations, we can also use documented dump function:
SQL> with 2 t(a,b) as ( 3 select * 4 from table(ku$_vcnt(null,'FF','A')) 5 ,table(ku$_vcnt(null,'FF','B')) 6 ) 7 select 8 a,b 9 ,case when sys_op_map_nonnull(a) = sys_op_map_nonnull(b) then '=' else '!=' end comp1 10 ,case when dump(a,1017) = dump(b,1017) then '=' else '!=' end comp2 11 ,sys_op_map_nonnull(a) s_o_m_n_a 12 ,sys_op_map_nonnull(b) s_o_m_n_b 13 ,dump(a, 17) dump_a 14 ,dump(b, 17) dump_b -- it is preferably sometimes to use 1017 - for charset showing 15 from t; A B COMP1 COMP2 S_O_M_N_A S_O_M_N_B DUMP_A DUMP_B ----- ----- ----- ----- ---------- ---------- --------------------- --------------------- = = FF FF NULL NULL FF != != FF 464600 NULL Typ=1 Len=2: F,F B != != FF 4200 NULL Typ=1 Len=1: B FF != != 464600 FF Typ=1 Len=2: F,F NULL FF FF = = 464600 464600 Typ=1 Len=2: F,F Typ=1 Len=2: F,F FF B != != 464600 4200 Typ=1 Len=2: F,F Typ=1 Len=1: B A != != 4100 FF Typ=1 Len=1: A NULL A FF != != 4100 464600 Typ=1 Len=1: A Typ=1 Len=2: F,F A B != != 4100 4200 Typ=1 Len=1: A Typ=1 Len=1: B 9 rows selected.