![](/img/trans.png)
[英]my query produces error “ORA-00933: SQL command not properly ended” in C++
[英]Why does my query produce error "ORA-00933: SQL command not properly ended"?
我的查詢:
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
您收到該錯誤的確切原因是您有這個 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'
在任何情況下,正如其他人指出的那樣,如果您解決了該語法問題,您只會收到有關缺少列名的其他錯誤消息。
首先,用分號分隔您的查詢並修復您的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'
看起來您想要更新中的 AND
UPDATE
cambiodatos
SET
name = 'North America'
WHERE
last_name = 'Biri' AND first_name = 'Ben'
在過去 7 年左右的時間里,我根本沒有使用過 Oracle,但您不需要 ; 在聲明的結尾?
首先,我認為您的 UPDATE 命令格式不正確。 其次,您使用的是基礎表中的字段,而不是運行更新所針對的視圖。 另外,我認為您無法更新基於連接的視圖。 請參閱對這個問題的回答。 如果你可以看起來像這樣。
UPDATE
cambiodatos
SET
[Nombre de Region] = 'North America'
WHERE
Nombre = 'Biro, Ben'
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' /* 缺少一個 And last_name = <> AND first_name = <> */
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.