Сначала разделите ваши запросы точкой с запятой и исправьте условия SET
:
CREATE VIEW cambiodatos AS
SELECT
a.last_name||','||a.first_name AS "Nombre",
a.salary AS "Salario",
b.name AS "Nombre Departamento",
c.name AS "Nombre de Region"
FROM
s_emp a, s_dept b, s_region c
WHERE
a.dept_id = b.id AND b.region_id = c.id;
UPDATE
cambiodatos
SET
name = 'North America'
WHERE
last_name = 'Biri'
AND first_name = 'Ben'
Вот причина вашей ошибки ORA-00933
Во-вторых, ваш оператор UPDATE
не будет выполнен, поскольку созданное вами представление не содержит поля name
.
Этот запрос будет скомпилирован:
UPDATE
cambiodatos
SET
"Nombre de Region" = 'North America'
WHERE
"Nombre" = 'Biri, Ben'
, но, скорее всего, произойдет сбой, поскольку s_region
не является key-preserved
в этом представлении.
Для обновления используйте это вместо:
MERGE
INTO s_region c
USING (
SELECT b.region_id
FROM s_emp a, s_dept b
WHERE a.last_name || ',' || a.first_name = 'Biri, Ben'
AND b.id = a.dept_id
) q
ON c.id = q.region_id
WHEN MATCHED THEN
UPDATE
SET c.name = 'North America'