CREATE TABLE events_tbl
(
e_id NUMBER
, e_date DATE
, e_info VARCHAR2(4000)
);
INSERT INTO events_tbl VALUES (43, '2000-01-01 01:10:00', 'event1');
INSERT INTO events_tbl VALUES (44, '2000-01-01 01:15:00', 'event2');
INSERT INTO events_tbl VALUES (45, '2000-01-01 01:20:00', 'event3');
INSERT INTO events_tbl VALUES (46, '2000-01-01 01:25:00', 'event4');
INSERT INTO events_tbl VALUES (47, '2000-01-01 02:10:00', 'event5');
INSERT INTO events_tbl VALUES (48, '2000-01-01 02:15:00', 'event6');
INSERT INTO events_tbl VALUES (49, '2000-01-01 02:20:00', 'event7');
INSERT INTO events_tbl VALUES (50, '2000-01-01 02:25:00', 'event8');
/* table that holds information about sent events */
CREATE TABLE events_sent_tbl
(
s_e_id NUMBER
, s_date DATE
);
INSERT INTO events_sent_tbl VALUES (43, '2000-01-01 02:01:00');
INSERT INTO events_sent_tbl VALUES (44, '2000-01-01 02:02:00');
SELECT *
FROM events_tbl
WHERE TO_NUMBER(TO_CHAR(e_date, 'MMDDHH24MiSS')) BETWEEN 0101010000 AND 0101015959
AND NOT EXISTS
(
SELECT 1
FROM events_sent_tbl
WHERE e_id = s_e_id
)
;
/*
45 2000-01-01 01:20:00 event3
46 2000-01-01 01:25:00 event4
*/
工作:
...的集合。將events_tbl和events_sent_tbl讀入集合。發送數據並更新集合中的信息。用FORALL將它轉儲到events_sent_tbl表中。
我仍然不知道,如果每封郵件類型添加字段(和索引)是走不過的方式?如果我確實去做,那麼這些將會有所幫助。 – thatmarvin
@thatmarvin另一種替代方法是簡單地有兩個表格:一個用於發送,另一個用於未發送的通知。發送通知時,只需將其從一個表移動到另一個表。顯然,如果你需要一個跨越兩個表的鍵並且可以複製FK,這可能會有問題,但是如果你的DBMS支持的話,這可以通過對錶進行分區來緩解(所以它仍然是邏輯上的一個表)。 –
我的桌子還很小,所以我現在想要最簡單的解決方案。我現在實際上在使用MongoDB,但計劃很快切換到postgresql(因此是誤導標籤)。我正在尋找的答案是「是的,你肯定需要旗幟才能做到這一點」,或者「不,有沒有旗幟就可以做的其他事情」。聽起來像你在說「是」! – thatmarvin