问题描述
我需要改变这个脚本,让它每天更新数据,因为每天插入新数据
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;
解决方法
为什么不每天更新数据?
没有 WHERE
子句(它会限制要更新的行),唯一的连接条件是 ON ( tcs.ROWID = src.rid )
,它始终为真,因为您基本上是在更新同一个表,基于其中的数据非常表。
因此,如果您的问题实际上是“如何每天自动运行此 MERGE
”,那么将其放入将被调度的存储过程中(按 DBMS_SCHEDULER
或更旧(但更简单){ {1}}) 每天运行。