-2

可能重复:
如何使用另一个表中的另一列更新一列?SQL 错误:ORA-00933:SQL 命令未正确结束

我已经尝试了所有我能想到但无法解决这个 SQL 错误的方法:

SQL Error: ORA-00933: SQL command not properly ended

这是 Oracle SQL。

不得不说,Oracle SQL 似乎比开源版本的 MySQL 更加笨拙和难用......非常感谢。

UPDATE SALES_DATA_FAMILY_2007 A 
SET A.POG_ID=B.POG_ID 
FROM POG_HIERARCHY B
WHERE A.FAMILY_ID=B.FAMILY
;
4

2 回答 2

0

Oracle 不支持UPDATE FROM语法 - 或者我上次查看时不支持。

这是BNF

UPDATE [schema .] { table | view} [ alias ] SET column = { expr | subquery }  [, column = { expr | subquery }]...[WHERE condition] ;

(来自:http ://docs.oracle.com/html/A95915_01/sqcmd.htm )

如果要设置 的所有值A.POG_ID,可以使用以下语法:

UPDATE SALES_DATA_FAMILY_2007 A 
SET A.POG_ID=(SELECT B.POG_ID 
          FROM POG_HIERARCHY B 
          WHERE A.FAMILY_ID=B.FAMILY);

或 PL/SQL,只是为了更新sales_data_family_2007适用的行:

DECLARE
BEGIN
FOR sdf_row_to_update IN (
      SELECT A.ROW_ID sdf_rowid, B.POG_ID 
      FROM POG_HIERACHY B, SALES_DATA_FAMILY_2007 A
      WHERE B.FAMILY=A.FAMILY_ID) LOOP
   UPDATE sales_data_family_2007 
   SET pog_id=sdf_row_to_update.pog_id 
   WHERE rowid=sdf_row_to_update.sdf_rowid;
END LOOP;
END;
于 2012-01-29T03:55:16.193 回答
0

如果要更新具有多个记录的子查询中的行,可以使用 merge commenad:

merge into SALES_DATA_FAMILY_2007 A
using (select POG_ID , FAMILY
                 FROM POG_HIERARCHY ) B
on (A.FAMILY_ID=B.FAMILY)
when matched then
update set A.POG_ID=B.POG_ID
于 2012-01-29T08:46:44.450 回答