3 回答

TA貢獻1842條經(jīng)驗 獲得超13個贊
這聽起來像是預定工作中應該發(fā)生的事情。我會在預訂中添加一個ready_for_archive列——只是一個布爾標志。
我將有一個查詢標記在指定日期/時間之前發(fā)生的所有預訂,并從 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;
在執(zhí)行該過程之前標記要存檔的記錄意味著不存在意外刪除因時間太短而無法復制的記錄的風險。
在Java中計算日期后傳入,使得sql查詢更加通用和可重用。

TA貢獻2041條經(jīng)驗 獲得超4個贊
創(chuàng)建一個存儲過程以從一個表移動到另一個表
如何用每日計劃的作業(yè)調(diào)用oracle中的存儲過程?
在 where 條件下添加 , trunc(sysdate) - to_date('completed_dt', 'yyyy-mm-dd') >2

TA貢獻1872條經(jīng)驗 獲得超4個贊
您可以安排 SQL 代理作業(yè)每天運行并調(diào)用存儲過程來瀏覽活動預訂并檢查 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());
添加回答
舉報