一个棘手的问题围绕在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