FoxBase!
msgbartop
Блог Oracle разработчика
msgbarbottom
foxbase

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

На практике часто требуется генерировать случайные числа в заданном диапазоне. Рассмотрим наиболее естественный способ сделать это на 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;
www.foxbase.ru



Смотрите также:



Оставьте свой комментарий

Вы должны быть авторизированны, чтобы оставить комментарий.