-2

重複の可能性:
別のテーブルの別の列を使用して 1 つの列を更新する方法は? 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);

sales_data_family_2007または、該当する行を更新するためだけに PL/SQL を実行します。

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 に答える