#oracle #random
#Oracle #Случайный
Вопрос:
У меня есть таблица с 3 столбцами: — PRIMARY_KEY
— AMOUNTS
— RAND_AMOUNTS
(все нули)
Я хочу, чтобы RAND_AMOUNTS
столбец был заполнен следующей формулой:
AMOUNT*(0-100 random value)/100
Так, например, если строка суммы, предположим, равна 10, а случайное значение, сгенерированное для строки, равно 10, тогда RAND_AMOUNT
должно быть 10 * 10 / 100 = $1
Ответ №1:
dbms_random() — это то, что вы ищете:
UPDATE the_table
SET rand_amount = (amount * dbms_random.value(0, 100) ) / 100
WHERE amount IS NOT NULL
Комментарии:
1. Спасибо, что сработало отлично 🙂 Почему я не вижу точности в моем rand_amount, все они являются целыми числами, хм.
2. @venky80 — проверьте столбец rand_amount, чтобы увидеть, определен ли он со шкалой 0 (например, число (9,0) ). Если это так, то будут сохранены только целые числа, поскольку scale — это количество цифр, разрешенное после десятичной дроби.
Ответ №2:
update yourtable set rand_amounts = dbms_random.value * amount;
Комментарии:
1. 1 отлично сделано. Это заслуживает большего количества положительных отзывов. @hal9000, вероятно, это было отклонено кем-то, кто не понимает, что это
dbms_random.value
возвращает то же самое, что иdbms_random.value(0,100)/100
. Это разрывы 🙂2. И для целых чисел от 1 до 4 (включительно):
ceil(dbms_random.value() * 4)
Ответ №3:
Используя:
dbms_random.value(lower-value-limit, upper-value-limit)
должно делать то, что вы ищете.