sql >> Database teknologi >  >> RDS >> Oracle

VÆLG * FRA TABEL (pipelined funktion):kan jeg være sikker på rækkefølgen af ​​rækkerne i resultatet?

Jeg tror ikke, der er nogen steder i dokumentationen, der garantier rækkefølgen som data vil blive returneret i.

Der er en gammel Tom Kyte tråd fra 2003 (så måske være forældet), som angiver, at det ikke ville være tilrådeligt at stole på den implicitte rækkefølge, af samme grunde som du ikke ville stole på ordren i almindelig SQL.

For at være sikker bør du gøre, som du altid ville gøre i en forespørgsel, angive en eksplicit ORDER BY, hvis du vil have forespørgselsresultaterne ordnet.

Når det er sagt, har jeg taget din funktion og kørt 10 millioner iterationer for at kontrollere, om den implicitte rækkefølge nogensinde blev brudt; det var det ikke.

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. CONCAT i lagret procedure returnerer null

  2. Postgres Funktion End Loop and Return Error

  3. Oprette indekser for grupper efter felter?

  4. Advarsel:mysql_real_escape_string() [function.mysql-real-escape-string]:Et link til serveren kunne ikke etableres i