首页 > 解决方案 > Oracle SQL 递归查询

问题描述

对此有疑问 - 有一个表更新,我必须回填超过一年的数据,并且由于我必须每天更新代码(每天需要 4-5 分钟),有谁知道我是怎么做到的可以通过设置日期列表更有效地做到这一点,这样我就可以在后台做到这一点。

因此,例如,如果我设置了一个名为 :reqdate 的变量,它是日期字段,并且我有一个来自查询的日期列表(例如 01/01/20、02/01/20... 04/04/20)我可以做些什么来让 sql 重复运行它,例如:regdate=01/01/20,然后当它完成后它会自动执行 02/01/20 等等

谢谢

标签: oraclerecursionrecursive-query

解决方案


如果我理解正确,最简单的方法是使用merge如下子句:

merge into dest_table t
using (
   select date'2020-01-01'+N as dt 
   from xmltable('0 to 10' columns N int path '.')
) dates
on (t.date_col = dates.dt)
whem matched then update
   set ...

尽管我认为您需要将更新重新设计为简单的更新,例如

update (select ... from) t 
set ... 
where t.dt between date'2020-01-01' and date'2020-01-20'

推荐阅读