PL/SQL-在游标上迭代并赋值
这可能是一个基本的问题,但我对PL/SQL还比较陌生,我被卡住了 假设我有一个光标,例如:PL/SQL-在游标上迭代并赋值,sql,oracle,plsql,Sql,Oracle,Plsql,这可能是一个基本的问题,但我对PL/SQL还比较陌生,我被卡住了 假设我有一个光标,例如: cursor pr_cur(pr_id varchar2) is select priority from some_table where id = pr_id; 优先级列只能有3个可能的值: “低”、“高”、“非常高” 我希望遍历游标并将找到的最高优先级分配给一个变量:max\u pr for pr_rec in pr_cur(some_value) loop max_pr :=
cursor pr_cur(pr_id varchar2)
is
select priority
from some_table
where id = pr_id;
优先级列只能有3个可能的值:
“低”、“高”、“非常高”
我希望遍历游标并将找到的最高优先级分配给一个变量:max\u pr
for pr_rec in pr_cur(some_value)
loop
max_pr := pr_rec.priority;
exit when pr_rec.priority = 'Very high';
end loop;
我希望这不是一个重复的问题。
我应该如何进行此操作?您可以在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;
您可以在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;
这可能会有帮助--
这可能会有帮助--
您不需要光标,并且使用不需要的
if else
循环。您可以使用单个sql查询,通过使用适当的ORDER BY
和row\u number
或FETCH FIRST
在Oracle 11g中
甲骨文12c及以上
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
您不需要光标,并且使用不需要的
if else
循环。您可以使用单个sql查询,通过使用适当的ORDER BY
和row\u number
或FETCH FIRST
在Oracle 11g中
甲骨文12c及以上
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