我陷入了找不到解决方案的情况。让我给出 PL/SQL 代码:
begin
outer_loop_counter := 0;
inner_loop_counter := 0;
-- Open first cursor
open get_vacancy;
--<<Outer_loop>>
loop
fetch get_vacancy
into v_category, v_gender, v_vacancy_count;
exit when get_vacancy%NOTFOUND;
open get_candidate;
--<<Inner_loop>>
for inner_loop_counter in 1 .. v_vacancy_count
loop
fetch get_candidate
into c_rollno, c_category,c_gender,c_total_marks;
update merit_list m set m.merit_position = inner_loop_counter;
end loop; --Inner_loop;
close get_candidate;
end loop; --Outer_loop;
close get_vacancy;
end;
上面的代码是为我正在使用Java和Oracle开发的大学的入学申请准备一个优点列表。现在的政策取决于每行的空缺数量,候选人将被分配一个绩效等级。现在,上述代码的问题是,对于每次从get_vacancy游标获取,内部循环游标都会从结果集的开头获取记录。我希望在上次获取中分配功绩排名的候选人在光标移动 w.r.t get_vacancy光标时不会出现在下一次获取中。我该怎么办?
我假设GET_CANDIDATE
游标读取(或可以从中读取)MERIT_LIST表。 鉴于此,您应该能够将以下内容添加到光标的 WHERE 子句中
AND MERIT_LIST.MERIT_POSITION IS NULL
这假设MERIT_POSITION对于尚未分配职位的候选人实际上是 NULL。
分享和享受。