sql >> Databasteknik >  >> RDS >> Oracle

SELECT * FROM TABLE (pipelined funktion):kan jag vara säker på ordningen på raderna i resultatet?

Jag tror inte att det finns någonstans i dokumentationen som garantier den ordning som data kommer att returneras i.

Det finns en gammal Tråden Tom Kyte från 2003 (så kan). vara inaktuell) som säger att det inte är tillrådligt att förlita sig på den implicita ordningen, av samma skäl som du inte skulle förlita dig på ordningen i vanlig SQL.

För att vara säker bör du göra som du alltid skulle göra i en fråga, ange en uttrycklig ORDER BY, om du vill ha sökresultaten ordnade.

Med det sagt har jag tagit din funktion och kört 10 miljoner iterationer för att kontrollera om den implicita ordningen någonsin bröts; det var det inte.

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. mysql pivotfrågeresultat med GROUP BY

  2. Hur vet jag om en mysql-tabell använder myISAM eller InnoDB Engine?

  3. Codeigniter aktiv post välj, vänster ansluta, räkna

  4. Tidszon datumformat i Oracle