我的查询:
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'||','||first_name = 'Ben'
错误:
ORA-00933: SQL command not properly ended
答案 0 :(得分:2)
你得到这个错误的确切原因是你有这个WHERE子句:
last_name = 'Biri'||','||first_name = 'Ben'
这不是合法的语法。
这将是:
last_name = 'Biri' AND first_name = 'Ben'
或类似的东西:
name = 'Biri'||','||'Ben'
但是你可以这样写:
name = 'Biri,Ben'
问题在于,我认为你正在使用第二个||有一个AND子句,但不适合你想要添加的逗号。
也许您正在尝试执行此操作?
last_name || ',' || first_name = 'Biri,Ben'
在任何情况下,正如其他人指出的那样,如果你修复了这个语法问题,你只会得到关于缺少列名的其他错误消息。
答案 1 :(得分:1)
首先,使用分号分隔查询并修复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'
答案 2 :(得分:0)
在升级中看起来你想要一个AND
UPDATE
cambiodatos
SET
name = 'North America'
WHERE
last_name = 'Biri' AND first_name = 'Ben'
答案 3 :(得分:0)
在过去7年左右的时间里,我根本没有使用过Oracle,但是你不需要一个;在陈述结束时?
答案 4 :(得分:0)
首先,我认为您的UPDATE命令格式不正确。其次,您使用的是基础表中的字段,而不是您正在运行更新的视图。此外,我认为您不能更新基于连接的视图。查看对此question的回复。如果你可能看起来像这样。
UPDATE
cambiodatos
SET
[Nombre de Region] = 'North America'
WHERE
Nombre = 'Biro, Ben'
答案 5 :(得分:-1)
创建视图cambiodatos AS 选择 a.last_name ||','|| a.first_name AS“Nombre”, a.salary AS“Salario”, b.name AS“Nombre Departamento”, c.name AS“Nombre de Region” 从 s_emp a,s_dept b,s_region c 哪里 a.dept_id = b.id AND b.region_id = c.id; / *缺少分号? * /
UPDATE cambiodatos 组 name ='北美' 哪里 last_name ='Biri'||','|| first_name ='Ben'/ *缺少an和last_name =<> AND first_name =<> * /