zoukankan      html  css  js  c++  java
  • ORACEL12c求和SUM(a+b)与SUM(a)+SUM(b)结果不一致问题

    今天在oracle12c数据库遇到的问题,下面重现一下:

    1、先创建一个临时表 temp、一个数据表bitest_sum;

    -- Create table
    create table PEC.BITEST_SUM
    (
      yyyymm  VARCHAR2(6),
      factno  VARCHAR2(4),
      dept_no VARCHAR2(4),
      product VARCHAR2(6),
      amt     NUMBER default 0 not null,
      amt_ys  NUMBER default 0 not null
    )
    tablespace BITBS;
    -- Add comments to the table 
    comment on table PEC.BITEST_SUM
      is 'SUM结果测试';
    -- Create/Recreate indexes 
    create index PEC.BITEST_SUM_01 on PEC.BITEST_SUM (YYYYMM, FACTNO, DEPT_NO, PRODUCT)
      tablespace IDX_BI;

    2、插入各维度数据到temp

    DELETE FROM gt_temp;
    INSERT INTO gt_temp
    (main_code,
    v1
    )
    SELECT 'A','AA01' FROM dual;
    
    INSERT INTO gt_temp
    (main_code,
    v1
    )
    SELECT 'B',DEPT_NO FROM(
    select 'BB'||dbms_random.string('x',2) DEPT_NO from dual) CONNECT BY ROWNUM <= 1000;
    
    INSERT INTO gt_temp
    (main_code,
    v1
    )
    SELECT 'C', lpad(ROWNUM,6,'0') FROM dual CONNECT BY ROWNUM <=1000;

    3、插入维度数据及随机值到结果表 bitest_sum

    DECLARE
    CURSOR C1 IS
        SELECT v1 FROM pec.gt_temp WHERE main_code='A';
    CURSOR C2 IS
        SELECT v1 FROM pec.gt_temp WHERE main_code='B';
    CURSOR C3 IS
         SELECT v1 FROM pec.gt_temp WHERE main_code='C';
    BEGIN
      FOR R1 IN C1 LOOP
        FOR R2 IN C2 LOOP
          FOR R3 IN C3 LOOP
    INSERT INTO BITEST_SUM
    SELECT '201605',a.v1,b.v1,c.v1, d.amt1,D.AMT2 FROM
    gt_temp a,gt_temp b,gt_temp c,
    (SELECT round(dbms_random.value(-10000,99999),2) amt1 ,round(dbms_random.value(-10000,99999),2) amt2 FROM dual) d
    WHERE a.main_code='A'  AND A.V1=R1.V1 
        AND B.MAIN_CODE='B'  AND B.V1=R2.V1
        AND C.MAIN_CODE='C'  AND C.V1=R3.V1;
        END LOOP;
       END LOOP;
      END LOOP;
     END;  
    COMMIT;

    4、检查数据结果

    5、对结果数据进行update操作。提交之后再查询:

    UPDATE pec.bitest_sum2 SET amt_ys=0 WHERE amt_ys<0 AND product LIKE '000%';

    pass:加“group by 1”在sql中数据是对的,金额字段加nvl(amt,0)数据也是对的。

    此问题已反馈给ORACLE,后续有结果再补充。

  • 相关阅读:
    使用cocoapods出现问题fetch of the ‘master’ 的解决方法
    说说ASP.NET的表单验证
    php分页类
    php校验
    mySQL时间
    asp .NET弹出窗口 汇总(精华,麒麟创想)
    (转)MVC 3 数据验证 Model Validation 详解
    (转)linux性能优化总结
    (转)ASP.NET缓存全解析6:数据库缓存依赖
    SQL Server是如何让定时作业
  • 原文地址:https://www.cnblogs.com/lanshure/p/5644347.html
Copyright © 2011-2022 走看看