【问题标题】:Oracle SQL Recursive QueryOracle SQL 递归查询
【发布时间】:2020-11-27 16:53:39
【问题描述】:

对此有疑问 - 有一个表更新,我必须回填超过一年的数据,并且由于代码我必须每天更新(每天需要 4-5 分钟),有没有人知道如何通过设置日期列表来更有效地执行此操作,以便我可以在后台执行此操作。

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

谢谢

【问题讨论】:

  • 你能提供一个你想要的可重现的例子吗?
  • 所以类似于 datelist as (select * from dates) insert into tablename select * from tableview where date=:reqdate on a loop
  • 努力让我们的生活更轻松。举例说明您的输入和您期望的输出。

标签: oracle recursion recursive-query


【解决方案1】:

如果我理解正确,最简单的方法是使用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'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多