以下是我的表格请求的条件。
level of till 300$ 301-500$ 501-3400$
credit card
usage in
3 month
0% 0% 0% 0%
1-30% 30% 0% 0%
31-50% 50% 0% 0%
51-60% 50% 15% 0%
61-70% 100% 15% 0%
70%~ 100% 30% 30%
我的任务是使用PL SQL检索上面提到的所有信息。我有表请求,其中包含3列作为client_id,level_3m和credit_limit所以输出(例如)应该使用上面的信息:
level_3m credit_limit($) new_limit(%)
0 50 0
45 400 0
45 250 50
65 350 15
80 1500 30
到目前为止我做了什么?这是我自己的脚本:
DECLARE
v_level VARCHAR2(100);
v_credit_limit VARCHAR2(100);
v_id VARCHAR2(100);
new_limit VARCHAR2(100);
BEGIN
SELECT level_3m,
credit_limit
INTO v_level, v_credit_limit
FROM request a
WHERE v_id = a.client_id;
--this is for "till 300$" condition
IF v_level = 0
AND v_credit_limit =< 300 THEN
new_limit := 0;
ELSIF v_level >= 1
AND v_level <= 30
AND v_credit_limit =< 300 THEN
new_limit := 30;
ELSIF v_level >= 31
AND v_level <= 50
AND v_credit_limit =< 300 THEN
new_limit := 50;
ELSIF v_level >= 51
AND v_level <= 60
AND v_credit_limit =< 300 THEN
new_limit := 50;
ELSIF v_level >= 61
AND v_level <= 70
AND v_credit_limit =< 300 THEN
new_limit := 100;
ELSIF v_level >= 70
AND v_credit_limit =< 300 THEN
new_limit := 100;
END IF;
END;
/
--the other conditions were written same manner as the above one.
我是PL / SQL的新手所以请告诉我的情况对不对?或者还有另一种更简单的方法来编写这些条件吗?
答案 0 :(得分:2)
你正在做If语句。
另一种选择是使用 CASE 。它基本上是相同的,但有时看起来有点整洁,特别是如果你写出许多ELSIF条款。
CASE
WHEN v_level=0 and v_credit_limit=<300 then new_limit:=0
WHEN v_level>=1 and v_level <=30 and v_credit_limit =<300 then new_limit:=30
WHEN v_level>=31 and v_level<=50 and v_credit_limit=<300 then new_limit:=50
WHEN v_level>=51 and v_level<=60 and v_credit_limit=<300 then new_limit:=50
WHEN v_level>=61 and v_level<=70 and v_credit_limit=<300 then new_limit:=100
WHEN v_level>=70 and v_credit_limit=<300 then new_limit:=100
END CASE
在我看来,你是否使用IF或CASE并不重要。
答案 1 :(得分:1)
就个人而言,我会在其中有一个包含v_level和信用限额的表,并加入到该表中以获取new_limit。
这是关系方式,因此也是这种背景下的“正确方式”。