SQL Fiddle
Настройка схемы Oracle 11g R2 :
CREATE TABLE input ( start_value, end_value, "INTERVAL" ) AS
SELECT 0, 120, 10 FROM DUAL UNION ALL
SELECT 1, 150, 50 FROM DUAL;
Запрос 1 :
WITH output ( rn, start_value, end_value, "INTERVAL", next_start_value ) AS (
SELECT ROWNUM, i.*, start_value FROM input i
UNION ALL
SELECT rn,
start_value,
end_value,
"INTERVAL",
next_start_value + "INTERVAL"
FROM output
WHERE next_start_value + "INTERVAL" <= end_value
)
SELECT start_value, end_value, next_start_value
FROM output
ORDER BY rn, next_start_value
Результаты
| START_VALUE | END_VALUE | NEXT_START_VALUE |
|-------------|-----------|------------------|
| 0 | 120 | 0 |
| 0 | 120 | 10 |
| 0 | 120 | 20 |
| 0 | 120 | 30 |
| 0 | 120 | 40 |
| 0 | 120 | 50 |
| 0 | 120 | 60 |
| 0 | 120 | 70 |
| 0 | 120 | 80 |
| 0 | 120 | 90 |
| 0 | 120 | 100 |
| 0 | 120 | 110 |
| 0 | 120 | 120 |
| 1 | 150 | 1 |
| 1 | 150 | 51 |
| 1 | 150 | 101 |