Генерация случайных чисел в заданном диапазоне

На практике часто требуется генерировать случайные числа в заданном диапазоне. Рассмотрим наиболее естественный способ сделать это на PL/SQL.Для генерации случайных чисел на PL/SQL существует замечательный пакет dbms_random. Этот пакет содержит все необходимые нам функции. Прежде всего любой генератор случайных чисел на любом языке программирования необходимо инициализировать некоторым случайным числом. Это необходимо для того, чтобы не получить в следующей сессии точно такой же набор «случайных» чисел. Инициализация генератора выполняется при помощи функции dbms_random.initialize(n), где n – некоторое случайное число, seed, характеризующее распределение случайных чисел, которые будут получаться в дальнейшем после инициализации. В PL/SQL достаточно написать, например, так:

dbms_random.initialize(100);

для инициализации в сессии sqlplus необходимо написать так:

EXEC dbms_random.initialize(100);

Заметим, что значение для инициализации генератора случайных чисел должно быть достаточно большим, от шести до десяти цифр. Малое значение seed может не обеспечить генерацию достаточно случайных чисел.Вопрос состоит в том, где взять достаточно случайное число для инициализации нашего генератора. Логично использовать текущее время в представлении gv$timer. Например, используя такой запрос в PL/SQL:

SELECT hsecs
  INTO n
  FROM gv$timer;

где n – заранее объявленная переменная в нашей PL/SQL функции, в которой требуется генерация случайных чисел. Теперь мы можем получить наше случайное число, используя функцию 

dbms_random.VALUE(min_val,max_val);

где min_val – минимальная граница диапазона, max_val – максимальная граница диапазона.После генерации требуемого количества случайных чисел желательно выполнить команду прекращения использования инициализированной сессии генерации случайных чисел при помощи команды 

dbms_random.terminate;
Ссылка на основную публикацию