重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
看了一下你的触发器.
成都创新互联公司秉承实现全网价值营销的理念,以专业定制企业官网,网站设计制作、网站设计,微信平台小程序开发,网页设计制作,成都做手机网站,成都全网营销推广帮助传统企业实现“互联网+”转型升级专业定制企业官网,公司注重人才、技术和管理,汇聚了一批优秀的互联网技术人才,对客户都以感恩的心态奉献自己的专业和所长。
INSERT 和 DELETE 的情况下, 执行正常
只有 UPDATE 有问题的话。
可能是 最后那里的判断不足
IF :NEW.TRANCT_TYPE='I' THEN
修改为
IF :OLD.TRANCT_TYPE='O' AND :NEW.TRANCT_TYPE='I' THEN ...
否则你随便 更新一个 什么 备注字段, 也把库存更新了。
我记得应该先关闭数据库实例,然后启动时选择read only
shutdown immediate;
startup open read only;
或者:
shutdown immediate;
startup mount;
alter database open read only;
SELECT j.mc AS 名称,
j.sum_j AS 进货量,
(j.sum_j-NVL(c.sum_c,0)) AS 库存
--只进未出的用NVL函数将未出的处理为0,否则计算出来的为NULL
FROM (
SELECT sp.mc,SUM(sp.sl) AS sum_j
FROM sp
WHERE sp.lb IN ('进') --如果有其他类别,如“退”和“换”货情况,加到IN子句中即可
GROUP BY sp.mc
) j
LEFT JOIN (--有进才有销
SELECT sp.mc,SUM(sp.sl) AS sum_c
FROM sp
WHERE sp.lb IN ('出')
GROUP BY sp.mc
) c
ON j.mc = c.mc