将项目从一个表重新插入到另一个表的 SQL 逻辑?例如,活动记录变成非活动记录

我有一张名为 booking 的表。主键是booking_id. 该表有一列名为booking_numbooking_num用于识别预订。

另一个表是booking_hist。目的是在一段时间后(假设是 2 天)将完整的预订记录从 booking 表传输到 booking_hist 表中。识别它的列将为completed_dt。例如,completed_dt是“08-SEP-19”。

我想要实现的是,在此日期后的两天后,它将被移入booking_hist表中。

列是否应该有 null<->non-null 转换?我需要什么逻辑才能实现这一目标?我怎样才能得到2天的日期?


萧十郎
浏览 125回答 3
3回答

红颜莎娜

这听起来像是预定工作中应该发生的事情。我会在预订中添加一个ready_for_archive列——只是一个布尔标志。我将有一个查询标记在指定日期/时间之前发生的所有预订,并从 java 传递 2 天前的日期。就像是&nbsp;UPDATE booking&nbsp;SET ready_for_archive = 1&nbsp;WHERE completed_dt <= :MY_START_DATE然后我会将所有这些记录添加到历史表中&nbsp;INSERT INTO booking_hist&nbsp;SELECT * FROM booking&nbsp;WHERE ready_for_archive = 1;然后将它们从预订表中删除:&nbsp;DELETE FROM booking&nbsp;WHERE ready_for_archive = 1;在执行该过程之前标记要存档的记录意味着不存在意外删除因时间太短而无法复制的记录的风险。在Java中计算日期后传入,使得sql查询更加通用和可重用。

缥缈止盈

创建一个存储过程以从一个表移动到另一个表如何用每日计划的作业调用oracle中的存储过程?在 where 条件下添加 , trunc(sysdate) - to_date('completed_dt', 'yyyy-mm-dd') >2

守着一只汪

您可以安排 SQL 代理作业每天运行并调用存储过程来浏览活动预订并检查 Completed_dt,如下所示:-- add your insert here, e.g. INSERT INTO bookings_hist (...)SELECT *FROM booking bLEFT JOIN booking_hist hON b.booking_id=h.booking_idWHERE h.booking_id IS NULLAND completed_dt IS NOT NULLAND completed_dt<DATEADD(DAY,-2,GETDATE());
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java