#sql #oracle #oracle11g #sql-update
#sql #Oracle #oracle11g #sql-обновление
Вопрос:
У меня есть таблица Rand_No, которую я хочу обновить следующим образом
UPDATE
RAND_NO
SET
rand_no1 = select floor(dbms_random.value(30, 35)) result
from dual
connect by level <= 366
/
Я хочу вводить данные между (30, 35) случайными и до 366 записей
, которые работали так, когда просто вставляли их
insert into rand_no (RAND_NO1)
select round(dbms_random.value(30, 35)) result
from dual
connect by level <= 366
;
но не в обновлении, я знаю, что делаю неправильно, пожалуйста, поправьте меня
Ответ №1:
Ваш оператор обновления получит:
ORA-00936: отсутствующее выражение
Если вы хотите обновить значение столбца из подзапроса, вы должны заключить его в круглые скобки:
UPDATE
RAND_NO
SET
rand_no1 = (select floor(dbms_random.value(30, 35)) result
from dual
connect by level <= 366)
/
Но поскольку этот подзапрос возвращает 366 строк, которые получат
ORA-01427: однорядный подзапрос возвращает более одной строки
Вы не можете установить значение в каждой строке для всех 366 новых случайных чисел, что и пытается сделать.
Если вы хотите обновить каждую существующую строку до нового случайного значения, вы можете просто сделать:
update rand_no
set rand_no1 = floor(dbms_random.value(30, 35));