Вы слишком усложняете вещи. Вам не нужно SELECT, FROM DUAL или что-то подобное.
Достаточно простого цикла FOR.
Если предположить, что numbers_t определен как:
CREATE OR REPLACE TYPE numbers_t AS TABLE OF NUMBER;
Тогда вы можете использовать это:
CREATE FUNCTION generate_series (minnumber INTEGER, maxnumber INTEGER)
RETURN numbers_t
PIPELINED
DETERMINISTIC
IS
BEGIN
FOR i IN minnumber .. maxnumber LOOP
PIPE ROW (i);
END LOOP;
RETURN;
END;
/
Для использования функции, вам нужно:
SELECT *
FROM TABLE(generate_series(1,42))