这可能是一个基本问题,但我对PL / SQL来说相对较新,而且我被卡住了。
我们说我有一个光标,例如:
cursor pr_cur(pr_id varchar2)
is
select priority
from some_table
where id = pr_id;
优先级列只能有3个可能的值: '低','高','非常高'
我想遍历游标并为变量分配最高优先级:max_pr。
for pr_rec in pr_cur(some_value)
loop
max_pr := pr_rec.priority;
exit when pr_rec.priority = 'Very high';
end loop;
我希望这不是一个重复的问题。 我应该怎么做呢?
答案 0 :(得分:2)
您可以在PL / SQL中尝试:
for pr_rec in pr_cur(some_value)
loop
CASE pr_rec.priority
WHEN 'Very high' THEN
max_pr := pr_rec.priority
WHEN 'High' THEN
IF max_pr IS NULL or max_pr = 'Low' THEN
max_pr := pr_rec.priority
END IF;
WHEN 'Low' THEN
IF max_pr IS NULL THEN
max_pr := pr_rec.priority
END IF;
END CASE;
exit when max_pr = 'Very high';
end loop;
答案 1 :(得分:2)
你不需要一个光标,而循环需要一个不需要的if else
。您可以使用单个sql查询来使用ORDER BY
或row_number
或FETCH FIRST
SELECT
priority
INTO max_pr
FROM
(
SELECT
t.*,
ROW_NUMBER() OVER(
ORDER BY
CASE priority
WHEN 'Very high' THEN 1
WHEN 'High' THEN 2
WHEN 'Low' THEN 3
ELSE 4
END
) AS rn
FROM
some_table t
)
WHERE
rn = 1;
来获取最高优先级
在 Oracle 11g
中SELECT
priority
INTO max_pr
FROM
some_table t
ORDER BY
CASE priority
WHEN 'Very high' THEN 1
WHEN 'High' THEN 2
WHEN 'Low' THEN 3
ELSE 4
END
FETCH FIRST 1 ROWS ONLY
Oracle 12c 及以上
web.xml
答案 2 :(得分:0)
这可能会有所帮助 -
for pr_rec in (select priority
from some_table
where id = pr_id)
loop
max_pr := pr_rec.priority;
if max_pr= 'Very high' then
exit;
end if;
end loop;