一個棘手的問題圍繞在SQLite中使用觸發器來執行自動更新...如何使用觸發器在SQLite中自動輸入重複數量?
我有一個情況,在這裏我需要在一個特定的日期開始的特定時間間隔在表中的條目。 「類別」表中的每個類別都有一個「RecurAmount」,其設置爲以4個固定時間間隔(7天,14天,1個月,1年)之一重現。 (我用整數1,2,3,4代表)每個類別都有一個RecurDate,它最初由用戶選擇。一旦這個日期通過我需要有應用程序做以下(假設例如應用程序處理不當被打開了幾個月的,需要刷新):
1)從類別其中選擇所有類別RecurDate is < = date('now')...這些是將被刷新的類別。
2)將變成 「成本」 表RecurAmount,RecurDate,CatKey,岑參取自值 「分類」 表爲以下成本列:金額 ,CostDate,* CatFK *,AutoExp
3)我需要則能夠有SQLite的以規則的間隔插入的日期入量在由「岑參」值所確定的時間間隔自動費用表。因此,如果其值爲「1」,我需要以7天的時間間隔從RecurDate開始進入成本表的序列,並且直到今天的日期但不再進一步。
4)一旦所有類別有他們的經常性成本enties應用到當前的日期...我需要被添加到RecurDate現場發回的類別表的一個將來的日期。這將作爲在下一次自動輸入之前需要匹配或傳遞的下一個日期。
這裏有林有工作表: 「分類」 表:
RecurDate Key RecurAmount Recur RecurInterval
2012-06-26 20 100 1 Weekly
2012-07-18 21 200 1 Weekly
2012-07-10 22 250 3 Monthly
2012-08-10 22 300 3 Monthly
2012-07-16 23 200 2 Fortnightly
2012-06-20 24 100 4 Yearly
「成本」 表。這是以固定日期間隔接收插入金額的表格。 假設今天的日期是2012-07-18,當我啓動經過長時間的應用,但不這樣做......我需要的費用表更新到這樣的事情:
CostDate CatFK Amount AutoExp
2012-06-26 20 100 1
2012-07-03 20 100 1
2012-07-10 20 100 1
2012-07-17 20 100 1
2012-07-18 21 200 1
2012-07-10 22 250 3
2012-07-16 23 200 2
2012-06-20 24 100 4
這裏開始我的代碼到目前爲止,它試圖完成每週的經常性費用。這顯然不工作...
PRAGMA recursive_triggers = on
CREATE TEMPORARY TRIGGER MyTrigger
BEFORE INSERT ON Costs
WHEN new.RecurDate < (select date('now','localtime')) BEGIN
INSERT INTO Costs (CostDate, Amount, CatFK, AutoExp)
VALUES (date(new.RecurDate,'+'||7||' days'), Category.RecurAmount, Category.Key, Category.Recur;
END
INSERT INTO Costs (CostDate, Amount, CatFK, AutoExp)
SELECT RecurDate, RecurAmount,Key, Recur from Category
WHERE
Recur =1 ;
正如你可以看到我的標題下使用觸發器以某種方式來做到這一點的路,但我是一個很長的路要走能完成這一操作。複雜性來自我正在處理的不斷重複的間隔,並基於這些不同的間隔識別未來的「RecurDate」並將其插入到Categories表中。我幾乎想着我在SQLIte之外使用AS3和循環來構建日期的自定義語句,然後插入我需要的SQLite。
我想知道,如果有人可以請給我一些指點,因爲這是非常棘手的,我不是很好:)
感謝
馬爾科
嗨約翰 感謝您詳細的答覆,這似乎是一個有趣的方法來嘗試似乎並不過於複雜。我會看看我是否可以在SQLite中使用它。 – 2012-07-19 07:27:14
我得到這個與SQLite幾個調整:我改變了getdate()爲julianday('現在','本地時間')和d.interval> 0到d.interval> = 0爲了得到第一個日期也進入了。謝謝你的幫助約翰。 M – 2012-07-19 12:38:12
不用擔心,很高興我能幫上忙 – 2012-08-09 04:08:24