0

私は解決策を見つけられない状況で立ち往生しています。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カーソルからのフェッチごとに、内側のループカーソルが結果セットの先頭からレコードをフェッチしていることです。前回のフェッチでメリットランクが割り当てられた候補は、カーソルがget_vacancyカーソルで移動したときに、次のフェッチに表示されないようにします。私は何をすべきか?

4

1 に答える 1

0

GET_CANDIDATEカーソルが MERIT_LIST テーブルを読み取る (または読み取ることができる) と仮定します。これを考えると、カーソルの WHERE 句に次を追加できるはずです

AND MERIT_LIST.MERIT_POSITION IS NULL

これは、ポジションがまだ割り当てられていない候補者の MERIT_POSITION が実際には NULL であることを前提としています。

共有してお楽しみください。

于 2012-06-27T16:34:05.610 に答える