本范例试图解决以下问题:
假如有一个主从块.
主块中存放总数量,
从块中多条记录存主块中的数量,即把主块中的数量分放到从块中,
当从块中的数量大于主块中总数量时,则提示有误,不让保存.
本来有人提议,使用key-commit
trigger,判断以上是否符合,才决定是否执行commit。不过,后来发现key-commit至少在以上情况,是没有控制到的:
1。当没存盘,按退出按钮时,会提示是否存盘。如果回答存盘,它的存盘运行不经过key-commit.
2.
当没存盘,按查询时(先按F7),会提示是否存盘,此时若存盘,也不受key-commit控制。
最后讨论后确定,以
pre-commit
trigger
作为合法性检查。如果不符合要求,使用raise
form_trigger_failure
阻止commit的执行。
建表语句为:
create
table
test_main(main_code
varchar2(12),main_line
number,main_qty
number);
insert
into
test_main
values('1000',1,12);
insert
into
test_main
values('1000',2,22);
commit;
alter
table
test_main
add
primary
key
(main_code,main_line);
create
table
test_detail(det_code
varchar2(12),det_line
number,det_qty
number);
insert
into
test_detail
values('1000',1,6);
insert
into
test_detail
values('1000',2,3);
insert
into
test_detail
values('1000',2,11);
insert
into
test_detail
values('1000',2,2);
commit;
运行结果为:
说明:上面的为主数据块,下面的为从数据块。
主数据块
(MAIN_CODE,MAIN_LINE)
是关健字。上图为点击主数据块的第二条记录记录时,从数据块立即显示相应的详细记录:一共有三条详细数据,数量汇总是:16,
它小于22,此时允许存盘。如果汇总结果大于22,存盘时会提示:error.