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