W przykładzie użyłem 15 jako maksimum, ale powinieneś ustawić je na 9999 lub inną maksymalną liczbę, którą będziesz obsługiwać.
create table t (product_id number, quantity number);
insert into t values (1,3);
insert into t values (2,5);
select t.*
from t
join (select rownum rn from dual connect by level < 15) a
on a.rn <= t.quantity
order by 1;