Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

SELECT * FROM TABLE(função em pipeline):posso ter certeza da ordem das linhas no resultado?


Acho que não há nenhum lugar na documentação que garanta a ordem em que os dados serão devolvidos.

Há um antigo Tópico de Tom Kyte de 2003 (assim pode estar desatualizado) que afirma que confiar na ordem implícita não seria aconselhável, pelas mesmas razões que você não confiaria na ordem no SQL comum.

Para estar seguro, você deve fazer como sempre faria em uma consulta, declarar um ORDER BY explícito, se desejar que os resultados da consulta sejam ordenados.

Dito isso, peguei sua função e executei 10 milhões de iterações, para verificar se a ordem implícita foi quebrada; não era.
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.