На практике часто требуется генерировать случайные числа в заданном диапазоне. Рассмотрим наиболее естественный способ сделать это на 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 – максимальная граница диапазона.
После генерации требуемого количества случайных чисел желательно выполнить команду прекращения использования инициализированной сессии генерации случайных чисел при помощи команды
Смотрите также:
Оставьте свой комментарий
Вы должны быть авторизированны, чтобы оставить комментарий.