SQL> create table t ( id int, income int, s date, e date );
Table created.
SQL>
SQL> insert into t values (1,2000,date '2016-02-01', date '2016-05-31');
1 row created.
SQL> insert into t values (2,1000,date '2016-01-01', date '2016-04-30');
1 row created.
SQL>
SQL> select t.id,t.income,add_months(s,column_value-1) d
2 from t,
3 table(
4 cast(multiset(select rownum r from dual connect by level <= round(months_between(t.e,t.s)) )
5 as sys.ODCINUMBERLIST));
ID INCOME D
---------- ---------- ---------
1 2000 01-FEB-16
1 2000 01-MAR-16
1 2000 01-APR-16
1 2000 01-MAY-16
2 1000 01-JAN-16
2 1000 01-FEB-16
2 1000 01-MAR-16
2 1000 01-APR-16
8 rows selected.