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 :=

这可能是一个基本的问题,但我对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 := 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