如何使用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_hh24
和plan_min_start_hh24
。
答案 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>