Most Efficient / Easiest Way to Capture Multiple Entries in Same Field
There are multiple ways of doing this, for example a short and easy version:

drop table bad_design purge;
create table bad_design (c1 varchar2(200 char));
insert into bad_design values ('a@a.com; b@b.com; c@c.com; d@d.com; e@e.com; f@f.com; g@g.com');
insert into bad_design values ('z@z.com; y@y.com; x@x.com; w@w.com; v@v.com; u@u.com; t@t.com');
insert into bad_design values ('o@o.com');
commit;


Then:

select
  trim(column_value) c1
from
  bad_design,
  xmltable(('"' || REPLACE(c1, ';', '","') || '"'))
;

a@a.com
b@b.com
c@c.com
d@d.com
e@e.com
f@f.com
g@g.com
z@z.com
y@y.com
x@x.com
w@w.com
v@v.com
u@u.com
t@t.com
o@o.com


Which you can simply insert into a new table if needed. Other methods:

https://stackoverflow.com/questions/14328621/splitting-string-into-multiple-rows-in-oracle