Воскресенье
20.09.2020
06:54


Форма входа


Приветствую Вас Гость | RSS
Статьи по ORACLE, PL/SQL, Java и немного по SHELL (BASH),...
Главная Каталог статей Регистрация Вход
Главная » Статьи » ORACLE » ORACLE, PL/SQL

Возвращение n случайных записей таблицы
Задача
Требуется возвратить некоторое число записей таблицы, выбранных случайным образом. Необходимо так изменить следующее выражение, чтобы при каждом последующем выполнении оно возвращало разные пять строк:

select ename, job
from emp;

Решение
Возьмите любую встроенную функцию, возвращающую случайные значения, которую поддерживает ваша СУБД, и примените ее в операторе ORDER BY, чтобы сортировать строки в случайном порядке. Затем для нагладности ограничьте число возвращаемых строк.
Oracle
Используйте встроенную функцию VALUE, которая находится во встроенном пакете DBMS_RANDOM, в сочетании с ORDER BY и встроенную функцию ROWNUM:

select *
from (
select ename, job
from scott.emp
order by dbms_random.value()
)
where rownum <= 5;

Обсуждение
Оператор ORDER BY может принимать возвращаемое функцией значение и использовать его для изменения порядка расположения элементов результирующего набора. Все предлагаемые решения ограничивают число возвращаемых строк после выполнения функции в операторе ORDER BY. Пользователям иных СУБД полезно рассмотреть решение Oracle, потому что на его примере можно (на концептуальном уровне) понять то, что в других решениях происходит "за кадром".
Важно четко различать, что происходит при использовании в ORDER BY функции и числовой константы. При задании в операторе ORDER BY числовой константы сортировка осуществляется по столбцу с заданным в списке SELECT порядковым номером. Когда в ORDER BY задается функция, сортировке подвергается результат, возвращаемый функцией для каждой строки.

Источник: Молинаро Э. "SQL. Сборник рецептов"
Категория: ORACLE, PL/SQL | Добавил: Akarak (11.11.2009)
Просмотров: 5811 | Комментарии: 3 | Рейтинг: 4.0/1
Всего комментариев: 3
0
2 Ден   [Материал]
На больших таблицах эта сортировка умрет. Особенно в приложениях, в которых счет идет на миллисекунды...

0
3 Akarak   [Материал]
Спасибо за комментарий, но на больших таблицах это делать не планировалось, только для тестирования, когда нужен рандомный набор данных

0
1 vasya-serega   [Материал]
Спасибо

Имя *:
Email *:
Код *:
Меню сайта

Категории раздела
ORACLE, PL/SQL [36]
Скрипты DDL [3]
Скрипты по управлению объектами
Встроенные функции SQL [2]
Встроенные функции SQL

Интересные сайты
  • sql.ru
  • all-oracle.ru
  • oranet.ru
  • oracloid.ru
  • forum.vingrad.ru

  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0

    Поиск

    Copyright MyCorp © 2020
    Используются технологии uCoz