请大家帮我看看这个触发器
时间:2011-11-16
来源:互联网
请帮我看看有没有语法错误,我第一次写这个,但是测试下来是有问题的,自己没办法找到问题在哪儿。
create or replace trigger Tzl060_cpckcx_TRIGGER
after update on twl090_cpxsckd
for each row
DECLARE
v_ckdbh char(11);
v_cplsh number(8);
v_bz char(1);
cursor cur_ckdcx is
select t130.ckdbh,case when count(*)*t015.mbxzs <> (select sum(xssl) from twl130_cpxsckd_mx where ckdbh=t130.ckdbh and cplsh = t130.cplsh) then '1' else '0' end bz,t130.cplsh
--into v_ckdbh,v_bz,v_cplsh
from twl130_cpxsckd_mx t130
join tzl052_ckcptbjl t052 on t052.ckdlsh=t130.ckdlsh
left join tzl003_cpz t003 on t003.cptbbh=t052.cptbbh
left join tzl041_ctbjl t041 on t041.cptbbh_new=t052.cptbbh
join tqj015_cpdmb t015 on t015.cplsh=t130.cplsh
where t130.ckdbh= :OLD.CKDBH
group by t130.ckdbh,t130.cplsh,t015.mbxzs;
BEGIN
IF :NEW.zt = '1' THEN
open cur_ckdcx;
loop
fetch cur_ckdcx into v_ckdbh,v_cplsh,v_bz;
delete from tzl060_cpckcx2
where ckdbh=v_ckdbh and cplsh=v_cplsh;
insert into tzl060_cpckcx2(ckdbh, cplsh, bz)
values(v_ckdbh, v_cplsh, v_bz);
end loop
close cur_ckdcx;
commit;
END IF;
END;
create or replace trigger Tzl060_cpckcx_TRIGGER
after update on twl090_cpxsckd
for each row
DECLARE
v_ckdbh char(11);
v_cplsh number(8);
v_bz char(1);
cursor cur_ckdcx is
select t130.ckdbh,case when count(*)*t015.mbxzs <> (select sum(xssl) from twl130_cpxsckd_mx where ckdbh=t130.ckdbh and cplsh = t130.cplsh) then '1' else '0' end bz,t130.cplsh
--into v_ckdbh,v_bz,v_cplsh
from twl130_cpxsckd_mx t130
join tzl052_ckcptbjl t052 on t052.ckdlsh=t130.ckdlsh
left join tzl003_cpz t003 on t003.cptbbh=t052.cptbbh
left join tzl041_ctbjl t041 on t041.cptbbh_new=t052.cptbbh
join tqj015_cpdmb t015 on t015.cplsh=t130.cplsh
where t130.ckdbh= :OLD.CKDBH
group by t130.ckdbh,t130.cplsh,t015.mbxzs;
BEGIN
IF :NEW.zt = '1' THEN
open cur_ckdcx;
loop
fetch cur_ckdcx into v_ckdbh,v_cplsh,v_bz;
delete from tzl060_cpckcx2
where ckdbh=v_ckdbh and cplsh=v_cplsh;
insert into tzl060_cpckcx2(ckdbh, cplsh, bz)
values(v_ckdbh, v_cplsh, v_bz);
end loop
close cur_ckdcx;
commit;
END IF;
END;
作者: fthinkjackss 发布时间: 2011-11-16
lz试试看还有其他问题没.
SQL code
SQL code
CREATE OR REPLACE TRIGGER tzl060_cpckcx_trigger AFTER UPDATE ON twl090_cpxsckd FOR EACH ROW DECLARE v_ckdbh CHAR (11); v_cplsh NUMBER (8); v_bz CHAR (1); CURSOR cur_ckdcx IS SELECT t130.ckdbh, CASE WHEN COUNT (*) * t015.mbxzs <> (SELECT SUM (xssl) FROM twl130_cpxsckd_mx WHERE ckdbh = t130.ckdbh AND cplsh = t130.cplsh) THEN '1' ELSE '0' END bz, t130.cplsh --into v_ckdbh,v_bz,v_cplsh FROM twl130_cpxsckd_mx t130 JOIN tzl052_ckcptbjl t052 ON t052.ckdlsh = t130.ckdlsh LEFT JOIN tzl003_cpz t003 ON t003.cptbbh = t052.cptbbh LEFT JOIN tzl041_ctbjl t041 ON t041.cptbbh_new = t052.cptbbh JOIN tqj015_cpdmb t015 ON t015.cplsh = t130.cplsh WHERE t130.ckdbh = :OLD.ckdbh GROUP BY t130.ckdbh, t130.cplsh, t015.mbxzs; BEGIN IF :NEW.zt = '1' THEN OPEN cur_ckdcx; LOOP FETCH cur_ckdcx INTO v_ckdbh, v_cplsh, v_bz; EXIT WHEN cur_ckdcx%NOTFOUND; --少了退出条件,会死循环 DELETE FROM tzl060_cpckcx2 WHERE ckdbh = v_ckdbh AND cplsh = v_cplsh; INSERT INTO tzl060_cpckcx2 (ckdbh, cplsh, bz ) VALUES (v_ckdbh, v_cplsh, v_bz ); END LOOP; CLOSE cur_ckdcx; -- commit;触发器中不能提交 END IF; END;
作者: tx2730 发布时间: 2011-11-16
1. 正常的触发器不会有事务控制语句,触发器中修改的内容由与外部事务统一处理。
2. loop循环没有退出的语句,估计会死循环。
2. loop循环没有退出的语句,估计会死循环。
作者: xiaobn_cn 发布时间: 2011-11-16
表级的触发器中是不能出现commit的,
只有数据库级事务触发器是可以commit的。
只有数据库级事务触发器是可以commit的。
作者: LuiseRADL 发布时间: 2011-11-16
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28