【问题标题】:How create procedure to update everyday如何创建每天更新的程序
【发布时间】:2021-05-12 05:53:38
【问题描述】:

我需要更改此脚本,使其每天更新数据,因为每天都会插入新数据

MERGE INTO t_customer_statistics tcs
USING (
  SELECT rowid rid,
         LEAD(TRX_DATE, 1) OVER (PARTITION BY cuid ORDER BY TRX_DATE DESC) AS prev_dt,
         LAG(TRX_DATE, 1) OVER (PARTITION BY cuid ORDER BY TRX_DATE DESC) AS next_dt
  FROM t_customer_statistics
) src
ON ( tcs.ROWID = src.rid )
WHEN MATCHED THEN
  UPDATE
  SET LIFECYCLE_STATUS = CASE
               WHEN prev_dt IS NULL
               THEN 'acquired'
               WHEN MONTHS_BETWEEN(TRUNC(tcs.TRX_DATE, 'MM'), TRUNC(src.prev_dt)) <= 1
               THEN 'existing'
               ELSE 'reactivated'
               END
               ||
               CASE
               WHEN COALESCE(src.next_dt, SYSDATE) >= tcs.TRX_DATE + INTERVAL '90' DAY
               THEN ', sleeping'
               END;

【问题讨论】:

    标签: sql oracle plsql sql-merge


    【解决方案1】:

    为什么不是每天更新数据?

    没有WHERE 子句(它将限制要更新的行),唯一的连接条件是ON ( tcs.ROWID = src.rid ),这始终是正确的,因为您基本上是根据该表中的数据更新同一个表。

    所以,如果您的问题实际上是“如何每天自动运行此 MERGE”,那么将其放入将安排的存储过程(由 DBMS_SCHEDULER 或更早(但更简单)DBMS_JOB)每天跑步。

    【讨论】:

      猜你喜欢
      • 2019-04-16
      • 1970-01-01
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      • 2016-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多