我有2个表在火鸟3数据库-主表"文件"的输出文件和明细表"Recs"销售的商品.
- 第
Docs
列:DOC_ID,SUMA - 第
Recs
列:ID、DOC_ID、Cargo 、价格、QNT
当客户取消销售时,这条记录保留在明细表中,没有删除它,更新后触发器更新主表的总数为summa
.
在输出表中保留最后一条记录之前,触发器工作正常.但是,如果客户取消上次销售并且详细信息数据集变为空,则触发器不能正常工作,并显示上次记录的summa
而不是0.
这个触发器有多正确?
CREATE OR ALTER TRIGGER RECS_AU FOR Recs
ACTIVE AFTER UPDATE POSITION 0
AS
DECLARE VARIABLE Price DECIMAL(12, 4);
DECLARE VARIABLE Doc_id INTEGER;
DECLARE VARIABLE OLD_Price DECIMAL(12, 4);
BEGIN
select
r.Doc_id,
coalesce(sum(r.Price*r.Qnt),0)
from Recs r, Docs d
where r.Doc_id=new.Doc_id and r.Doc_id=d.Doc_id and r.status<>'deleted'
group by r.Doc_id
into :Doc_id, :Summa;
update Docs set
Docs.Summa=:Summa:
where Doc_id=:Doc_id;
我知道问题出在编写正确的SQL中,而不是触发器中.在数据集变为空之后,它返回空的记录集.为什么在数据集为空的情况下不工作合并,并且不将summa
显示为0?
SELECT
doc_id,
coalesce(SUM(cast((r.price*r.qnt) as decimal(18,4))),0) as summa
FROM
recs r
WHERE
doc_id= :doc_id AND status <> 'deleted'
GROUP BY
doc_id