2013-08-14 1 views
0

커서를 함수의 입력 매개 변수로 전달하고 있습니다.커서 변수를 여러 번 가져 오는 방법

Function (p_cur IN curType) ... 

    Loop (outer loop) 

     Loop (inner loop) 

     fetch p_cur into p_cur_rec; 
     exit when p_cur%notfound; 

     do some processing here... 

     end loop; 

    END Loop; 

내부 루프는 모든 커서 기록을 가져와 내가 데이터를 처리하기 위해 각 반복 통과 할 수 있었다.

그러나 외부 루프가 두 번째 레코드를 가져 오면 내부 루프가 커서에서 다시 가져 오지 않는 것처럼 보입니다. 커서 레코드가 이미 가져와서 다시 사용할 수없는 것으로 보입니다.

제 질문은이 문제를 어떻게 극복하여 커서를 다시 가져올 수 있습니까?

+0

. afterwads 당신은 커서를 다시 열어야합니다 – schurik

+1

그 간단한 개요에서 당신 주위에 루프를 바꿀 수도 있을지 모르지만, 실제로 당신이하고있는 프로세싱에 달려 있습니다. 다른 옵션으로는 커서 문을 전달하여 재실행 할 수 있습니다 (비싸고 느릴 수 있음). 또는 커서를 PL/SQL 테이블에로드하여 결과를 여러 번 반복 할 수 있습니다. 하지만 그것은 당신이하고있는 일에 달려 있습니다 ... –

+0

왜 같은 쿼리를 여러 번 실행해야합니까? 처리가 데이터를 수정하므로 새로운 데이터를보기 위해 다음 반복을 쿼리해야합니까? 왜 메모리에있는 배열에 데이터를로드하지 않습니까? –

답변

0

는이처럼 내부 루프를 할 커서를 사용할 수 있습니다 : 당신이 한 번만 커서에서 데이터를 가져올 수 있습니다

cursor c_1 as 
    select ... 
    from .. 
    where ... 

rec c_1%rowtype; 

begin 

for rec in c_1 loop 
... 
end loop; 
end;