sql >> Database >  >> RDS >> Oracle

SELECT * FROM TABLE (pipelined-functie):kan ik zeker zijn van de volgorde van de rijen in het resultaat?

Ik denk niet dat er ergens in de documentatie staat die garandeert de volgorde waarin de gegevens worden geretourneerd.

Er is een oude Tom Kyte-thread uit 2003 (dus misschien verouderd zijn), waarin staat dat vertrouwen op de impliciete volgorde niet raadzaam zou zijn, om dezelfde redenen als dat je niet zou vertrouwen op de volgorde in gewone SQL.

Om veilig te zijn, moet u doen zoals u altijd zou doen in een zoekopdracht, een expliciete ORDER BY vermelden als u de zoekresultaten wilt bestellen.

Dat gezegd hebbende, heb ik je functie overgenomen en 10 miljoen iteraties uitgevoerd, om te controleren of de impliciete volgorde ooit is verbroken; dat was het niet.

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.


  1. Complexe soort veld string - nummer - string

  2. Leer 2 - 2 cijfers achter de komma op een vlotter?

  3. Java Spring REST API verwerkt veel optionele parameters

  4. MySQL-viewdefiner-machtigingen en fout 1356