3 回答
TA贡献1842条经验 获得超12个赞
这听起来像是预定工作中应该发生的事情。我会在预订中添加一个ready_for_archive列——只是一个布尔标志。
我将有一个查询标记在指定日期/时间之前发生的所有预订,并从 java 传递 2 天前的日期。就像是
UPDATE booking
SET ready_for_archive = 1
WHERE completed_dt <= :MY_START_DATE
然后我会将所有这些记录添加到历史表中
INSERT INTO booking_hist
SELECT * FROM booking
WHERE ready_for_archive = 1;
然后将它们从预订表中删除:
DELETE FROM booking
WHERE ready_for_archive = 1;
在执行该过程之前标记要存档的记录意味着不存在意外删除因时间太短而无法复制的记录的风险。
在Java中计算日期后传入,使得sql查询更加通用和可重用。
TA贡献2041条经验 获得超4个赞
创建一个存储过程以从一个表移动到另一个表
如何用每日计划的作业调用oracle中的存储过程?
在 where 条件下添加 , trunc(sysdate) - to_date('completed_dt', 'yyyy-mm-dd') >2
TA贡献1872条经验 获得超3个赞
您可以安排 SQL 代理作业每天运行并调用存储过程来浏览活动预订并检查 Completed_dt,如下所示:
-- add your insert here, e.g. INSERT INTO bookings_hist (...)
SELECT *
FROM booking b
LEFT JOIN booking_hist h
ON b.booking_id=h.booking_id
WHERE h.booking_id IS NULL
AND completed_dt IS NOT NULL
AND completed_dt<DATEADD(DAY,-2,GETDATE());
添加回答
举报