开发者

Oracle update Query does not work

开发者 https://www.devze.com 2023-03-31 13:53 出处:网络
I have anORACLE query which does not work for this query. UPDATE emp a set a.Enq_Status = \'PROGRESS\'

I have an ORACLE query which does not work for this query.

UPDATE emp a set a.Enq_Status = 'PROGRESS' 
where exists (select * from emp  a, Data b   
         WHERE a.SA_Enq_Status开发者_如何学运维 is NULL 
           and a.EQ_Status = 'ACTIVATED' 
           and a.Activation_Return_Code = 0 
           and a.Alert_Code > 0 
           and a.User_Id = b.User_Id 
           and (b.Is_Associate is NULL or b.Is_Associate = 0)  
           and (b.Stk_Schd is NULL)
           and (b.Stk_Dis_Amt is NULL)
);

My Problem is I want to update mutiple records in the table emp (A) to status to 'PROGRESS'.But when executing this query all records in a.Enq_status is changes.Please help me in this.Updation is not correct.Please help me in this


You have specified table emp both in the update query and the subquery too, Oracle will treat these as seperate tables. You need a correlated subquery:

UPDATE emp a
   set a.Enq_Status = 'PROGRESS'   
 where exists (select 'X'                   
                 from Data b                   
                WHERE a.SA_Enq_Status is NULL                    
                  and a.EQ_Status = 'ACTIVATED'                    
                  and a.Activation_Return_Code = 0                    
                  and a.Alert_Code > 0                    
                  and a.User_Id = b.User_Id                    
                  and (b.Is_Associate is NULL or b.Is_Associate = 0) 
                  and (b.Stk_Schd is NULL)
                  and (b.Stk_Dis_Amt is NULL)); 

You could probably just update the emp table without the need for the subquery though if you link to the Data table in the where clause...


Your update statement will update all the records in emp table because you don't specify the records to update. If your sub-query returns at least one row, the all the emp records will be updated. If it returns no rows, then none of the records will be updated.

Change your update like this:

UPDATE emp SET Enq_Status = 'PROGRESS' 
WHERE id in 
(SELECT a.id 
 FROM emp  a, Data b  
 WHERE a.SA_Enq_Status is NULL and a.EQ_Status = 'ACTIVATED' 
   and a.Activation_Return_Code = 0 and a.Alert_Code > 0 
   and a.User_Id = b.User_Id and (b.Is_Associate is NULL or b.Is_Associate = 0)
   and (b.Stk_Schd is NULL)and (b.Stk_Dis_Amt is NULL)
);


Try:

UPDATE emp a
   SET a.enq_status = 'PROGRESS'
 WHERE a.sa_enq_status IS NULL
   AND a.eq_status = 'ACTIVATED'
   AND a.activation_return_code = 0
   AND a.alert_code > 0
   AND EXISTS
       (SELECT 'X'
          FROM data b
         WHERE a.user_id = b.user_id
           AND ( b.is_associate IS NULL OR b.is_associate = 0 )
           AND b.stk_schd IS NULL
           AND b.stk_dis_amt IS NULL);
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号