Oracle
 sql >> база данни >  >> RDS >> Oracle

SELECT * FROM TABLE (конвейерна функция):мога ли да съм сигурен в реда на редовете в резултата?

Не мисля, че има някъде в документацията, която гаранции реда, в който данните ще бъдат върнати.

Има един стар Нишка за Том Кайт от 2003 (така че може да е остарял), което гласи, че разчитането на имплицитния ред не би било препоръчително поради същите причини, поради които не бихте разчитали на реда в обикновен SQL.

За да сте сигурни, трябва да направите както винаги в заявка, да посочите изрично ORDER BY, ако искате резултатите от заявката да са подредени.

След като казах, че взех вашата функция и изпълних 10 милиона итерации, за да проверя дали имплицитният ред някога е бил нарушен; не беше.

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. Oracle база данни:разделяне на низ по знаци

  2. Отмяна на ангажирана транзакция

  3. Как да използвам GROUP BY на CLOB колона с Oracle?

  4. Създайте потребител от низови променливи в PL/SQL блок

  5. Материализираният изглед в oracle с Fast Refresh вместо пълен не работи