Well...I dont know what structure you have for recording that, seeing as we have a complete lack of a test case :-)
But I'll assume that you have an additional set of columns "COL1_MODIFIED", "COL2_MODIFIED" etc...then you could extend the merge
merge into STAGING s
using ( select * from APP_TABLE ) a
on ( s.PK_COL1 = a.PK_COL1
and s.PK_COL2 = a.PK_COL2 -- ie, primary key columns
and ...
)
when matched then
update set
s.MODIFIED = 'YES',
s.COL1_MODIFIED = decode(s.COL1,a.COL1,1,0),
s.COL2_MODIFIED = decode(s.COL1,a.COL2,1,0),
s.COL3_MODIFIED = decode(s.COL1,a.COL3,1,0),
s.COL4_MODIFIED = decode(s.COL1,a.COL4,1,0)
...
where decode(s.COL1,a.COL1,1,0) = 0
or decode(s.COL2,a.COL2,1,0) = 0
or decode(s.COL3,a.COL3,1,0) = 0
or decode(s.COL4,a.COL4,1,0) = 0
or decode(s.COL5,a.COL5,1,0) = 0