2012-06-22 2 views
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; 

위의 코드는 내가 자바와 오라클을 사용하여 개발 오전 대학에 대한 입학 응용 프로그램에 대한 장점 목록을 준비하기위한 것입니다. 이제 정책은 각 행 가져 오기에서 공석의 수에 따라, 후보자는 공로 순위가 할당됩니다. 이제 위 코드의 문제점은 get_vacancy 커서를 가져올 때마다 내부 루프 커서가 결과 집합의 시작 부분에서 레코드를 가져 오는 것입니다. 커서가 w_r.t get_vacancy 커서를 움직이면 마지막 반입에서 메리트 등급이 할당 된 후보가 다음 반입에 나타나지 않기를 바란다. 어떻게해야합니까?

+0

그래서 v_vacancy_count로 가져올 때 얻는 값은 실제로 필요한 것보다 높을 수 있습니다. 따라서 get_candidate를 반복하는 것이 필요 이상입니까? 공정한 평가입니까? – zundarz

답변

0

GET_CANDIDATE 커서를 MERIT_LIST 테이블에서 커서 읽기 (또는 읽을 수 있음)한다고 가정합니다. 이 감안할 때, 당신은이 MERIT_POSITION 아직 위치를 할당되지 않은 후보자에 대한 사실 NULL에 있다고 가정 커서

AND MERIT_LIST.MERIT_POSITION IS NULL 

의 WHERE 절에 다음을 추가 할 수 있어야합니다.

공유하고 즐기십시오.

관련 문제