Вы можете создать вид, подобный этому.
Примеры строк
INSERT INTO NR1 (id,price,price2,start_date,end_date,duration) VALUES ( 1,20,40,DATE '2018-05-01',NULL, 5);
INSERT INTO NR1 (id,price,price2,start_date,end_date,duration) VALUES ( 2,30,60,DATE '2018-02-01',NULL, 6);
View
CREATE OR REPLACE VIEW v_NR1 AS
SELECT id,price,price2,
add_months(start_date,level - 1) AS start_date,
last_day(add_months(start_date,level - 1) ) AS end_date
FROM
nr1
CONNECT BY level <= duration
AND PRIOR id = id
AND PRIOR sys_guid() IS NOT NULL;
Демо