Oracle
 sql >> Base de données >  >> RDS >> Oracle

SELECT * FROM TABLE (fonction en pipeline) :puis-je être sûr de l'ordre des lignes dans le résultat ?

Je ne pense pas qu'il y ait quelque part dans la documentation qui garantit l'ordre dans lequel les données seront renvoyées.

Il y a un vieux Fil Tom Kyte à partir de 2003 (alors pourrait être obsolète) qui stipule que s'appuyer sur l'ordre implicite ne serait pas conseillé, pour les mêmes raisons que vous ne vous fieriez pas à l'ordre en SQL ordinaire.

Pour être sûr, vous devez faire comme vous le feriez toujours dans une requête, énoncez un ORDER BY explicite, si vous voulez que les résultats de la requête soient triés.

Cela dit, j'ai pris votre fonction et exécuté 10 millions d'itérations, pour vérifier si l'ordre implicite n'a jamais été rompu; ce n'était pas le cas.

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.