Oracle
 sql >> Baza danych >  >> RDS >> Oracle

SELECT * FROM TABLE(funkcja potokowa):czy mogę być pewien kolejności wierszy w wyniku?

Nie sądzę, aby w dokumentacji było jakiekolwiek miejsce, które gwarantuje kolejność, w jakiej dane zostaną zwrócone.

Jest stary Wątek Toma Kyte od 2003 (więc może być nieaktualne), który stwierdza, że ​​poleganie na kolejności niejawnej nie byłoby wskazane, z tych samych powodów, z których nie polegasz na kolejności w zwykłym SQL.

Aby być bezpiecznym, powinieneś postępować tak, jak zawsze w zapytaniu, podać jawne ORDER BY, jeśli chcesz uporządkować wyniki zapytania.

Powiedziawszy, że wziąłem twoją funkcję i wykonałem 10 milionów iteracji, aby sprawdzić, czy niejawna kolejność została kiedykolwiek złamana; tak nie było.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Znajdowanie ostatniego indeksu ciągu w Oracle

  2. funkcja interwałowa w wyroczni

  3. Mieszanie instrukcji DDL i DML w jednym skrypcie

  4. Identyfikator wyroczni hibernacji jest za długi ORA-00972

  5. Jak przywrócić dane w tabeli Oracle?