ORA-00934: групповая функция здесь запрещена при попытке использовать UPDATE - PullRequest
0 голосов
/ 08 января 2020

Я написал этот код в Oracle APEX:

UPDATE employee SET total_cost = (SUM(c.price) 
FROM course c, schooling s
WHERE 
s.id_employee_schooling = id_employee AND s.id_course_schooling = c.id_course);

, и он говорит мне, что групповая функция

здесь не разрешена.

Я обнаружил, что не могу использовать sum и WHERE вместе, но я не знаю, как написать этот код по-другому. Любые решения? Спасибо.

1 Ответ

3 голосов
/ 08 января 2020

Похоже, вы просто забыли ключевое слово SELECT в своем подзапросе.

UPDATE employee
       SET total_cost = (SELECT sum(c.price)
                                FROM course c
                                     INNER JOIN schooling s
                                                ON s.id_course_schooling = c.id_course
                                WHERE s.id_employee_schooling = id_employee);

Я также изменил ваше неявное соединение на явное для лучшей читаемости.

Но оно также выглядит как то, что вы собираетесь делать, не должно быть сделано вообще. total_cost, кажется, хранит избыточные данные, которые могут вызвать несоответствия. Таким образом, физический столбец total_cost должен быть полностью удален. Когда вам нужно это значение при запросе сотрудников, получите его из других таблиц с объединениями или подзапросами. Таким образом, значения всегда верны. Вы также можете создать вид, чтобы сделать это более удобным.

...