давно была задача считать накопление в течении месяца и если сумма покупок по карте больше 5000, карта блокировалась и начинала работать со следующего месяца. скрипт запускался каждую ночь:
(cardtype=5 - тип карты, 5000 - сумма покупок)
Цитата: update supermag.smdiscpers set lastchange=sysdate, validtill=sysdate where code in
((SELECT b.code
FROM
SUPERMAG.SMDISCPERS B,
SUPERMAG.smactivityclient H,
SUPERMAG.SMCLIENTINFO F
WHERE
(cardtype=5) AND
(B.CLIENT = F.ID (+)) AND
(B.CODE = H.CODE) and
(h.createdat>=(trunc(sysdate,'MM'))) and
(h.createdat<(last_day(sysdate)))
and (b.validtill>=sysdate)
GROUP BY
B.CODE
having SUM(H.sumsale)>=5000));
commit;
insert into smpostqueue(enqtime,enqseq,target,objtype,objid,paramint,paramstr,transflags,virtpack,commentary) select sysdate,rownum,null,'DC', code , null, null, 0,null, null from smdiscpers where to_char(lastchange,'DDMMYYYY')=to_char(sysdate,'DDMMYYYY');
commit;
exit;
а этот запускался 1 числа месяца:
Цитата: update supermag.smdiscpers set lastchange=sysdate, validtill=last_day(sysdate)+1 where cardtype=5;
commit;
insert into smpostqueue(enqtime,enqseq,target,objtype,objid,paramint,paramstr,transflags,virtpack,commentary) select sysdate,rownum,null,'DC', code , null, null, 0,null, null from smdiscpers where to_char(lastchange,'DDMMYYYY')=to_char(sysdate,'DDMMYYYY');
commit;
exit;
небольшим допиливанием можно сделать перенос карты из одной группы в другую (например, если у карт с разными процентами скидок, разные ограничения на группы)