Form Block的属性"Precompute Summaries"使用

在Oracle EBS的二次开发中,常有需要显示某个数据块中金额或数量的汇总等等。
我们都知道,在Oracle Form Builder中有提供了汇总的功能,但它的这个汇总功能的前提是汇总的明细块需要一次性查询出所有的数据!
这对于基于B/S架构的EBS应用来说显然是不合适的。数据量少的话还好,一旦数据量超过1W行,速度就会慢起来。而且大大增加Form应用的负担。

最近研究过才知道,其实Oracle Form提供了一种另外的汇总办法"预汇总的设定"来解决这个问题。

就是Block属性的:Precompute Summaries:
作用:在Data Block进行正常查询前,进行Summarized item计算 (Default:No) 

注:当设置为Yes时,适用于Data Block中存在汇总项的情况,并且此时还要保证Block的Query All Records属性设置为No.

只要Block的Precompute Summaries设置为Y了,就可以用汇总的Item。

2013.2.7新增:

另外必须要注意的,基于预汇总查询的逻辑是用SQL汇总栏位,所以对应的汇总的Item必须是数据库的Item,否则编译的时候会报错:

FRM-30426: Summarized control item must reside in a control block, or in a block with Query All Records set to Yes.
Item: SUM_RETURN_QTY
Block: MOVE_QUERY_CONTROL

解决方法:

1 当然,非数据库的Item就不要汇总栏位的,最简单的解决~

2 在视图增加一个虚拟栏位。例如TO_NUMBER(NULL) XXX_COLUMN。然后就可以用汇总了。

-------------------

经过跟踪确认,其实当Precompute Summaries='Y',它可以找到汇总的值的原理是:在用户查询该Block的时候,Form自动用SQL获取对应的要汇总的Item的值,再是查询实际Form明细的SQL:

  SELECT COUNT(TOL_HOLE)
        ,SUM(TOL_HOLE)
        ,COUNT(TOL_BLACKAREA)
        ,SUM(TOL_BLACKAREA)
        ,COUNT(MOVE_RETIRE_QUANTITY)
        ,SUM(MOVE_RETIRE_QUANTITY)
        ,COUNT(MOVE_DLV_QUANTITY)
        ,SUM(MOVE_DLV_QUANTITY)
        ,COUNT(MOVE_TRX_SQM)
        ,SUM(MOVE_TRX_SQM)
        ,COUNT(MOVE_TRX_QUANTITY)
        ,SUM(MOVE_TRX_QUANTITY)
        ,COUNT(SUGGEST_QUANTITY)
        ,SUM(SUGGEST_QUANTITY)
        ,COUNT(JOB_QUANTITY)
        ,SUM(JOB_QUANTITY)
    FROM XYG_WIP_MOVE_TRANSACTION_V
   WHERE (MAKE_DATE BETWEEN TO_DATE('2012/02/01 00:00:00'
                                   ,'YYYY/MM/DD HH24:MI:SS'
                                   )
                        AND  TO_DATE('2012/02/01 23:59:59'
                                    ,'YYYY/MM/DD HH24:MI:SS'
                                    ))
     AND (FACTORY = :1)
     AND (ORGANIZATION_ID = :2)
ORDER BY LINE_ID

跑完上面的获取汇总的值的SQL之后,再是获取明细的值:

  SELECT * FROM XYG_WIP_MOVE_TRANSACTION_V
   WHERE (MAKE_DATE BETWEEN TO_DATE('2012/02/01 00:00:00'
                                   ,'YYYY/MM/DD HH24:MI:SS'
                                   )
                        AND  TO_DATE('2012/02/01 23:59:59'
                                    ,'YYYY/MM/DD HH24:MI:SS'
                                    ))
     AND (FACTORY = :1)
     AND (ORGANIZATION_ID = :2)
ORDER BY LINE_ID

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值