Как обновить столбец таблицы случайными значениями в пределах диапазона в Oracle?

#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)
  

должно делать то, что вы ищете.