MYSQL更新语句不适用于Oracle

时间:2017-05-29 15:34:11

标签: sql oracle

我有一个在MySQL中运行良好的查询,

update rpt_dev a inner join rpt_dev_temp b
on a.Interaction_UDL = b.Interaction_UDL
set a.Till_Next = datediff(b.Int_start,a.Int_start)
where a.Till_Next <= 0 and 
a.Int_start not in (select max(a.Int_start) from rpt_dev_temp a);

当我在Oracle上运行时,我得到以下错误:

  

1)SQL命令未正确结束。

     

2)缺少设置关键字

1 个答案:

答案 0 :(得分:1)

使用join更新语句在Oracle中实现有点棘手。请改用MERGE

同样如评论中所述,datediff在Oracle中无效。所以直接减去日期。但是b.Int_start - a.Int_start会在days中给你带来改变。将其乘以2424*6024*60*60,以分别在hoursminutesseconds中获得差异。

merge into rpt_dev a
using rpt_dev_temp b
on (a.Interaction_UDL = b.Interaction_UDL)
when matched then update 
set a.Till_Next = (b.Int_start - a.Int_start)
where a.Till_Next <= 0 and 
a.Int_start not in (select max(Int_start) from rpt_dev_temp);

注意:在运行之前备份原始数据。在您的测试数据上测试它,并且在您确定要更新正确的行之前不进行提交。

简而言之,请格外小心地运行更新/删除语句。