Oracle:UPDATE语句导致ORA-00933错误



有人能看到这句话出了什么问题吗?我已经尝试了一段时间来修复它,但没有成功,我在网上找到的答案坚持认为我需要删除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;

Oracle不支持UPDATE FROM语句,但支持UPDATE SELECT。试试这个。对于此查询节点。NodeID必须是Nodes表中的主键。我猜v_MaskReasonId,。。。字段来自节点(?):

 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

您必须删除from tags

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;

最新更新