触发器的意图:在更新某条记录后自动更改当前帐户的当前交易之后的所有交易记录的余额。比如:帐户1(帐目编号体现)有5次交易记录,现在修改该帐户第一次交易时的收入字段,则本次交易的余额应自动刷新,并且其后面4次的余额也要自动跟着刷新。
表结构及说明:
create table zmmx
(whbh number(10) primary key, --交易编号--
zmbh varchar2(14), --帐目编号--
zmlb number(2) not null, --帐目类别--
whrq date not null, --交易日期--
kmbh number(3), --科目编号--
srje number(8,2), --收入金额--
zcje number(8,2), --支出金额--
ye number(8,2), --帐目余额--
jzr char(10), --记帐人--
foreign key (zmbh) references zongz(zmbh),
foreign key (kmbh) references kem(kmbh));
请高手指出下面触发器存在的问题,并指正!
CREATE OR REPLACE TRIGGER tri_change_zmmx BEFORE INSERT OR DELETE OR UPDATE ON zmmx FOR EACH ROW
declare
v_lastye zmmx.ye%type;
v_bdje zmmx.ye%type;
v_whbh zmmx.whbh%type;
v_zmbh zmmx.zmbh%type;
BEGIN
v_lastye:=:old.ye;
v_zmbh:=:old.zmbh;
v_whbh:=:old.whbh;
--用下面的一行可以自动改变当前记录的余额--
:new.ye:=v_lastye+:new.srje-:old.srje+:old.zcje-:new.zcje;
--下面想改变其他相关记录的余额,但是出错了!--
v_bdje:=:new.ye-v_lastye;
update zmmx set ye=ye+v_bdje where zmbh=v_zmbh and whbh>v_whbh;
END tri_change;
/
表结构及说明:
create table zmmx
(whbh number(10) primary key, --交易编号--
zmbh varchar2(14), --帐目编号--
zmlb number(2) not null, --帐目类别--
whrq date not null, --交易日期--
kmbh number(3), --科目编号--
srje number(8,2), --收入金额--
zcje number(8,2), --支出金额--
ye number(8,2), --帐目余额--
jzr char(10), --记帐人--
foreign key (zmbh) references zongz(zmbh),
foreign key (kmbh) references kem(kmbh));
请高手指出下面触发器存在的问题,并指正!
CREATE OR REPLACE TRIGGER tri_change_zmmx BEFORE INSERT OR DELETE OR UPDATE ON zmmx FOR EACH ROW
declare
v_lastye zmmx.ye%type;
v_bdje zmmx.ye%type;
v_whbh zmmx.whbh%type;
v_zmbh zmmx.zmbh%type;
BEGIN
v_lastye:=:old.ye;
v_zmbh:=:old.zmbh;
v_whbh:=:old.whbh;
--用下面的一行可以自动改变当前记录的余额--
:new.ye:=v_lastye+:new.srje-:old.srje+:old.zcje-:new.zcje;
--下面想改变其他相关记录的余额,但是出错了!--
v_bdje:=:new.ye-v_lastye;
update zmmx set ye=ye+v_bdje where zmbh=v_zmbh and whbh>v_whbh;
END tri_change;
/
解决方案 »
- 初学者 麻烦求助一个SQL语句 显示 ORA-00936: missing expression
- 求助,关于Oracle 11g 存储过程,调用ftp.put上传文件
- 查询date字段为null时设置为当前日期
- ORACLE是开源的么?
- 请较如何导出数据库中某一时间段的数据
- 这难道是oracle的bug?
- 绿色版客户端 设置问题
- 关于存储过程中varchar2变量长度的奇怪问题(急)
- 一个奇怪的问题 关于exception 的问题
- 关于Oracle的拆库,拆表
- CSDN还有没有高手?
- 执行CREATE TABLE TEST_CLOB ( ID NUMBER(3), CLOBCOL CLOB)建一表出错
declare
v_lastye zmmx.ye%type;
v_bdje zmmx.ye%type;
v_whbh zmmx.whbh%type;
v_zmbh zmmx.zmbh%type;
BEGIN
v_lastye:=:old.ye;
v_zmbh:=:old.zmbh;
v_whbh:=:old.whbh;
--用下面的一行可以自动改变当前记录的余额--
if inserting or updating then
:new.ye:=v_lastye+:new.srje-:old.srje+:old.zcje-:new.zcje;
--下面想改变其他相关记录的余额,但是出错了!--
v_bdje:=:new.ye-v_lastye;
:new.ye=:new.ye+v_bdje;
end if;
END tri_change;
/