Nie sądzę, aby w dokumentacji było jakiekolwiek miejsce, które gwarantuje kolejność, w jakiej dane zostaną zwrócone.
Jest stary Wątek Toma Kyte od 2003 (więc może być nieaktualne), który stwierdza, że poleganie na kolejności niejawnej nie byłoby wskazane, z tych samych powodów, z których nie polegasz na kolejności w zwykłym SQL.
Aby być bezpiecznym, powinieneś postępować tak, jak zawsze w zapytaniu, podać jawne ORDER BY, jeśli chcesz uporządkować wyniki zapytania.
Powiedziawszy, że wziąłem twoją funkcję i wykonałem 10 milionów iteracji, aby sprawdzić, czy niejawna kolejność została kiedykolwiek złamana; tak nie było.
SQL> begin
2 for i in 1 .. 10000000 loop
3 for j in ( SELECT a.*, rownum as rnum FROM table(temp_func()) a ) loop
4
5 if j.x <> j.rnum then
6 raise_application_error(-20000,'It broke');
7 end if;
8 end loop;
9 end loop;
10 end;
11 /
PL/SQL procedure successfully completed.