说明:1.档的概念:通过档来进行分层计算。
          2.档的个数:每个人档的个数和比例是不一定的。
          3.档的个数和比例放在数据库的demo表中。
          4.通过存储过程来计算金额。
例子:比如说某个一他有3档。
        如果他有3000块钱,有2档,比例分别是90,50,限额是1000,5000
          计算金额=1000*90+(3000-1000)*50
     因为档的个数和比例是不一定的,只能通过存储过程来查。我该怎么进行计算?
          

解决方案 »

  1.   

    这个功能正在开发,表还没有建。表里大概放三个字段,一个是档的级别,另一个是档的比例,还有一个是ID号。可以通过id号来查出该id人下最多有几档。然后通过计算来算出这个人需要交多少钱。
    如果他有3000块钱,有2档,比例分别是90,50,限额是1000,5000
      计算金额=1000*90+(3000-1000)*50
      

  2.   


    嗯,我Oracle学的不怎么好。大牛可以给个例子吗?
      

  3.   

    测试数据:DROP TABLE T178;
    CREATE TABLE T178
    (
        NAME VARCHAR2(20),
        Lev NUMBER(2),
        QUOTA   NUMBER(6),
        PERCENT NUMBER(3)
    );INSERT INTO T178 VALUES('小王', 1, 1000, 90);
    INSERT INTO T178 VALUES('小王', 2, 2000, 50);
    INSERT INTO T178 VALUES('小王', 3, 5000, 40);
    INSERT INTO T178 VALUES('小李', 1, 1000, 90);
    INSERT INTO T178 VALUES('小李', 2, 1400, 80);
    INSERT INTO T178 VALUES('小李', 3, 5000, 50);
    存储过程代码:CREATE OR REPLACE FUNCTION getValue(pName VARCHAR2, pTotal NUMBER) RETURN NUMBER
    IS
        Result NUMBER := 0; 
        vLevel NUMBER;  --记录处于第几个档   
        TYPE QuotaArray IS TABLE OF NUMBER(6) INDEX BY BINARY_INTEGER;
        vQuotaArray QuotaArray;
        TYPE PercentArray IS TABLE OF NUMBER(2) INDEX BY BINARY_INTEGER;
        vPercentArray PercentArray;
        
        CURSOR cur(ppName VARCHAR2) IS SELECT Lev, Quota, Percent FROM T178
        WHERE NAME = ppName;
    BEGIN
        FOR r IN cur(pName) LOOP
            vLevel := r.Lev;
            vQuotaArray(vLevel) := r.Quota;
            vPercentArray(vLevel) := r.Percent;
            IF pTotal <= r.quota THEN
                EXIT;
            END IF;            
        END LOOP;
        
        FOR i IN 1..vLevel LOOP
            IF i = 1 THEN
                RESULT := RESULT + vQuotaArray(i) * vPercentArray(i) * 0.01;                    
            ELSIF i > 1 AND i != vLevel THEN
                RESULT := RESULT + (vQuotaArray(i) - vQuotaArray(i-1)) * vPercentArray(i) * 0.01;
            ELSE
                RESULT := RESULT + (pTotal - vQuotaArray(i - 1)) * vPercentArray(i) * 0.01;
            END IF; 
        END LOOP;        
            
        return(Result);
    END getValue;