有时候需要显示某个栏位的汇总数量,且在例如新增、删除,修改记录的时候,汇总项的值要相应地改变,如果直接使用中形式的总和属性功能,对于清除等操作要进行复杂处理.Oracle提供了APP_CALCULATE.RUNNING_TOTAL来实现这种需求,封装在APPCORE.PLL中。
例如:,
要汇总的项目为:LINES.QUANTITY,要显示汇总结果的块为HEADERS
1.标题里建立要显示的汇总结果,如QTY_SUM
2.标题里建立两个非数据库项,分别命名为QTY_SUM_RTOT_OLD和QTY_SUM_RTOT_DB(型),
3.线里建立两个非数据库项,分别命名为QUANTITY_RTOT_OLD和QUANTITY_RTOT_DB(型),
4 .建立存储过程来包装APP_CALCULATE.RUNNING_TOTAL
例:
IS  VARCHAR2过程RUNNING_TOTAL_QUANTITY(事件);
BEGIN
,APP_CALCULATE。RUNNING_TOTAL(事件,& # 39;LINES.QUANTITY& # 39;, & # 39; HEADERS.QTY_SUM& # 39;),,
结束,,
5:行。数量的WHEN-VALIDATE-ITEM触发器中写RUNNING_TOTAL_QUANTITY (& # 39; WHEN-VALIDATE-ITEM& # 39;);
,,,如果要汇总的栏位来自多个栏位的运算,需要在每个栏位的WHEN-VALIDATE-ITEM时写运算重新计算值赋给要汇总的栏位。
6.:标题的post请求触发器中从数据库中抓取初始的汇总值,例:
Declare
,V_SUM;数量,
BEGIN
,选择NVL(和(数量),0),
,,,,,V_SUM
,,从LINES ,;
,,HEADER_ID=: HEADERS.HEADER_ID;,
,:HEADERS.QTY_SUM ,,,,,,,,,,,,,,,,:=V_SUM;大敌;
,,
结束;
7:线的如下触发中写相应代码:,
——KEY-DELREC
RUNNING_TOTAL_QUANTITY (& # 39; KEY-DELREC& # 39;),,
DELETE_RECORD;
——KEY-DUPREC
RUNNING_TOTAL_QUANTITY (& # 39; KEY-DUPREC& # 39;),,
DUPLICATE_RECORD;
——KEY-CLRREC
RUNNING_TOTAL_QUANTITY (& # 39; KEY-CLRREC& # 39;),,
CLEAR_RECORD;——(网上例子为:APP_FOLDER.EVENT (& # 39; KEY-CLRREC& # 39;)。)
——POST-QUERY
RUNNING_TOTAL_QUANTITY (& # 39; POST-QUERY& # 39;);
注:网上例子中还有post_insert, post_update, pre_record中写,我目前没写,测试好,不知道会有什么漏洞,暂时没测出来。
另外上面的链接中,作者的例子会有问题,像链接文章评论所说,作者需增加, ,即,
最初我没有写, 注①, ,后经测试,, ,还是举个例子说的吧:
※※※※、、、※※※※※※※※※※、、、、、、、、、※※※※※※※※※※、、、、、、、、、※※※※※※※※※※、、、、、、、、、※※※※※※※※※※、、、、、、、、、※※※※※※※※※※、、、、、、、、、※※※※※※※※※※、、、、、、、、、※※※※※※※※※。、、、、、、、、
行项只有一条记录,值为100,
※※※※、、、※※※※※※※※※※、、、、、、、、、※※※※※※※※※※、、、、、、、、、※※※※※※※※※※、、、、、、、、、※※※※※※※※※※、、、、、、、、、※※※※※※※※※※、、、、、、、、、※※※※※※※※※※、、、、、、、、、※※※※※※※※※。、、、、、、、、
注①一定要写。 强>
块的删除允许设置为不,由于种种原因,删除按钮是亮的。这种情况下,点击, 的时候会提示
,,,,,,,纳- 41049:你不能删除这个记录。但是汇总量会被减掉,一直点下去,会一直减掉. .直至负NNNN…… APP_CALCULATE.RUNNING_TOTAL用法