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.
