2016-11-24 35 views
0

UPDATE实际
SET Actual.tranamt = ABS(Actual.tranamt-Reversal.tranamt),
Actual.tranamt_org = ABS(Actual.tranamt),
Actual.trans_flag = 'U'
FROM
( SELECT *
FROM “MATCHPOINT_DEV”。 “GTT_temp_raw_neft_cbs_iss”
)AS实际
INNER JOIN
(SELECT *
FROM “MATCHPOINT_DEV”。 “GTT_temp_raw_neft_cbs_iss” WHERE(reversalrrn IS NOT NULL或REVE 'rsarrrn <>'')
)AS Reversal
ON Actual.rrn = Reversal.reversalrrn;如何使用Oracle中的派生表更新语句?

入门错误

SQL错误:ORA-00933:SQL命令未正确结束

  1. 00000 - “SQL命令不能正常结束”
+1

Oracle是否真的支持非标准的UPDATE FROM语法? – jarlh

+0

这对Oracle来说是无效的语法。相反,你应该看看在MERGE语句中进行更新。 – Boneist

回答

0

一种方法使用merge。另一种方法,子查询:

UPDATE "MATCHPOINT_DEV"."GTT_temp_raw_neft_cbs_iss" Actual         
    SET tranamt = 
     (SELECT ABS(Actual.tranamt - x.tranamt),       
      FROM "MATCHPOINT_DEV"."GTT_temp_raw_neft_cbs_iss" reversal 
      WHERE (reversal.reversalrrn IS NOT NULL OR reversal.reversalrrn <> '') and 
       Actual.rrn = Reversal.reversalrrn 
     ),      
     tranamt_org = ABS(Actual.tranamt),         
     trans_flag = 'U'       
WHERE EXISTS (SELECT 1 
       FROM "MATCHPOINT_DEV"."GTT_temp_raw_neft_cbs_iss" reversal 
       WHERE (reversal.reversalrrn IS NOT NULL OR reversal.reversalrrn <> '') and 
        Actual.rrn = Reversal.reversalrrn 
      );