1

このステートメントの何が問題なのか、誰にもわかりますか? 私はしばらくそれを修正しようとしましたが、無駄でした.Webで見つけた回答は、使用していないORDERBYステートメントを削除する必要があると主張しています.

BEGIN
   UPDATE        Tags
     SET           MaskReasonId = v_MaskReasonId,
                    AppliedTime = v_AppliedTime,
                    ExpireTime = v_ExpireTime,
                    UserId = v_UserId,
                    ClientNode = v_ClientNode,
                    CommentId = v_CommentId
     FROM          Tags
     WHERE         Tag = v_sTag OR Tag = v_Tag;
END;
4

3 に答える 3

3

Oracle は UPDATE FROM ステートメントをサポートしていませんが、UPDATE SELECT をサポートしています。これを試して。このクエリでは、Nodes.NodeID が Nodes テーブルの主キーである必要があります。v_MaskReasonId,... は NODES(?) のフィールドだと思います:

 update (select * from Tags
         INNER JOIN    Nodes ON Nodes.NodeId = Tags.NodeID
          WHERE         Node = v_Node AND (Tag = v_sTag OR Tag = v_Tag)
         ) t
       set t.MaskReasonId = t.v_MaskReasonId
           t.ExpireTime = t.v_ExpireTime,
           t.UserId = t.v_UserId,
           t.ClientNode = t.v_ClientNode,
           t.CommentId = t.v_CommentId
于 2012-08-28T08:21:19.070 に答える
2

を削除する必要がありますfrom tags

于 2012-08-28T08:06:46.997 に答える
1

Oracle は update ステートメントで "FROM" 構造をサポートしていません。これを試してください。

BEGIN
   UPDATE        Tags
     SET           MaskReasonId = v_MaskReasonId,
                    AppliedTime = v_AppliedTime,
                    ExpireTime = v_ExpireTime,
                    UserId = v_UserId,
                    ClientNode = v_ClientNode,
                    CommentId = v_CommentId
     WHERE EXISTS (SELECT * FROM Tags WHERE Tag = v_sTag OR Tag = v_Tag);
END;
于 2012-08-28T08:12:34.300 に答える