如何在Oracle中使用派生表更新语句?

时间:2016-11-24 13:23:58

标签: sql oracle oracle11g

更新实际
     SET Actual.tranamt = ABS(Actual.tranamt-Reversal.tranamt),
         Actual.tranamt_org = ABS(Actual.tranamt),
            Actual.trans_flag =' U'
     从
    (选择*
     FROM" MATCHPOINT_DEV"。" GTT_temp_raw_neft_cbs_iss"
     )AS实际
     INNER JOIN
    (选择*
     FROM" MATCHPOINT_DEV"。" GTT_temp_raw_neft_cbs_iss"在哪里(反转是非空或反转<>'')
     )AS逆转
     ON Actual.rrn = Reversal.reversalrrn;

获取错误

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

  1. 00000 - " SQL命令未正确结束"

2 个答案:

答案 0 :(得分:0)

Oracle不支持该查询 您可以在此帖子Update statement with inner join on Oracle

中尝试以下格式

答案 1 :(得分: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 
             );