正确编写PL SQL条件的方法

时间:2013-05-14 11:19:58

标签: sql plsql if-statement

以下是我的表格请求的条件。

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的新手所以请告诉我的情况对不对?或者还有另一种更简单的方法来编写这些条件吗?

2 个答案:

答案 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。

这是关系方式,因此也是这种背景下的“正确方式”。