There is no 100% reliable way to map rows to transactions, unless you add custom columns.
ORA_ROWSCN, even with
ROWDEPENDENCIES enabled, is not always accurate. Jack's test is correct, and shows that a single transaction will save all rows with the same SCN. However, it is also possible for a different transaction to create a row with the same SCN.
--Create a table with ROWDEPENDENCIES enabled.
drop table rowscn_test;
create table rowscn_test(a number) rowdependencies;
--Create 100 jobs to insert and commit one row.
for i in 1 .. 100 loop
job_name => 'rowscn_'||i,
job_type => 'PLSQL_BLOCK',
job_action => 'begin insert into rowscn_test values(1); commit; end;',
enabled => true
--If ORA_ROWSCN was reliable then this query would not return any rows.
select ora_rowscn, count(*)
group by ora_rowscn
having count(*) > 1;
The results are not deterministic and will be different for each system. Sometimes the
ORA_ROWSCNs are unique and the query returns no results. But I would not rely on that always being true.