Nemyslím si, že v dokumentaci není nikde uvedeno, co by zaručovalo pořadí, ve kterém budou data vrácena.
Existuje starý Vlákno Toma Kyte z roku 2003 (takže možná být zastaralý), který uvádí, že spoléhat se na implicitní pořadí by nebylo vhodné ze stejných důvodů, jako byste se nespoléhali na pořadí v běžném SQL.
Chcete-li, aby byly výsledky dotazu seřazeny, měli byste pro jistotu postupovat jako vždy v dotazu a uvést explicitní ORDER BY.
Poté, co jsem řekl, že jsem vzal vaši funkci a provedl 10 milionů iterací, abych zkontroloval, zda byl implicitní příkaz někdy porušen; nebylo.
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.