Ошибка, которую вы получили, ORA-01427, означает слишком много строк (были возвращены подзапросом). Например, на основе схемы Скотта (поскольку у меня нет ваших таблиц), это выглядит так:
SQL> update emp e set
2 (e.ename, e.job) = (select d.dname, d.loc from dept d);
(e.ename, e.job) = (select d.dname, d.loc from dept d)
*
ERROR at line 2:
ORA-01427: single-row subquery returns more than one row
Почему бы это не сработало? Потому что подзапрос возвращает более одной строки!
SQL> select d.dname, d.loc from dept d;
DNAME LOC
-------------- -------------
ACCOUNTING NEW YORK
RESEARCH DALLAS
SALES CHICAGO
OPERATIONS BOSTON
SQL>
Итак, как бы вы поместили все эти значения в одну строку таблицы EMP? Очевидно, что это не сработает, поэтому вам нужно сделать что-то , чтобы ограничить количество строк. Как? Смотря как.
иногда DISTINCT
помогает, например
select distinct d.dname, d.loc from dept d
иногда помогает дополнительное WHERE
условие, например
select d.dname, d.loc from dept d
where d.location = 'NEW YORK'
иногда помогает объединение с обновляемой таблицей, например,
select d.dname, d.loc from dept d where d.deptno = e.deptno
, что приводит к
SQL> update emp e set
2 (e.ename, e.job) = (select d.dname, d.loc from dept d where d.deptno = e.deptno);
14 rows updated.
Что делать? Я не знаю, у нас нет ваших данных. Посмотрите, поможет ли что-то написанное выше.