使用For循环重写If-else块

时间:2015-06-25 09:33:15

标签: oracle if-statement for-loop plsql

如何使用for循环编写以下If-else块:

    BEGIN
        IF :new.plan_id = 1 THEN
          SELECT PLAN_MAX_START_HH24 INTO NEW_PLAN_MAX_START_HH24 FROM screening_plan WHERE plan_id = 1; 
          SELECT PLAN_MIN_START_HH24 INTO NEW_PLAN_MIN_START_HH24 FROM screening_plan WHERE plan_id = 1;
        ELSIF :new.plan_id = 2 THEN
          SELECT PLAN_MAX_START_HH24 INTO NEW_PLAN_MAX_START_HH24 FROM screening_plan WHERE plan_id = 2; 
          SELECT PLAN_MIN_START_HH24 INTO NEW_PLAN_MIN_START_HH24 FROM screening_plan WHERE plan_id = 2;
        ELSIF :new.plan_id = 3 THEN
          SELECT PLAN_MAX_START_HH24 INTO NEW_PLAN_MAX_START_HH24 FROM screening_plan WHERE plan_id = 3; 
          SELECT PLAN_MIN_START_HH24 INTO NEW_PLAN_MIN_START_HH24 FROM screening_plan WHERE plan_id = 3;
        ELSIF :new.plan_id = 4 THEN
          SELECT PLAN_MAX_START_HH24 INTO NEW_PLAN_MAX_START_HH24 FROM screening_plan WHERE plan_id = 4; 
          SELECT PLAN_MIN_START_HH24 INTO NEW_PLAN_MIN_START_HH24 FROM screening_plan WHERE plan_id = 4;
        END IF;
     END;

对于值plan_id的某些1,2,3,4,我必须选择plan_max_start_hh24plan_min_start_hh24

1 个答案:

答案 0 :(得分:1)

为什么你认为你需要FOR LOOP?我假设plan_id是一个唯一的数字(即上述每个查询最多返回1行)。

另外,为什么要做两个选择呢?您可以在一个select语句中将多个列返回到相应的变量中。

我想你可能想要这样的东西:

  if :new.plan_id in (1, 2, 3, 4) then
    select plan_max_start_hh24, plan_min_start_hh24
    into   new_plan_max_start_hh24, new_plan_min_start_hh24
    from   screening_plan
    where  plan_id = :new.plan_id;
  end if;

不要忘记包含一个异常块,以考虑上述查询不返回行的情况(并且,如果plan_id不是唯一列,则返回多行)。< / p>