обновление подключения по уровню, пожалуйста, проверьте, где я делаю неправильно

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

db<>скрипка