2012-05-03 3 views
1

내에서 루프 나는, 나는 ProcResult2 SYS_REFCURSOR 반환 다른 프로 시저 Procedure2을 proc 디렉토리에 저장 Procedure1, Procedure1 내Oracle 저장 프로 시저 - 커서

  1. 를 호출하고있다.
  2. 나는 테이블에 데이터를이 커서의 각 행을 통해 통과하고 삽입해야

코드

Create Procedure1() 
as 
ProcResult1 Sys_refcursor; 
begin 
    Procedure2(ProcResult2); 
    For eachrow in ProcResult2 
     Loop 
     insert into test_table(ProcResult2.Id); 
     end loop; 
end ;\ 

어떤 생각의 2 기능을 수행하는 방법에 대한 포인터? ProcResult2에서 반환 된 각 행을 통과하여 새 테이블에 삽입됩니다.

답변

2

당신은 거의 다 있습니다

Create Procedure1() 
as 
    ProcResult1 Sys_refcursor; 
    v_record ???; -- See below 
begin 
    Procedure2(ProcResult2); 
    Loop 
     fetch ProcResult2 into v_record; 
     exit when ProcResult2%notfound; 
     insert into test_table(v_record.Id); 
    end loop; 
    close ProcResult2; 
end; 

당신은 커서 반환 무엇 일치하는 구조 변수 v_record를 선언 할 필요가 - 즉 당신이 절차를 구축 커서 레코드의 구조를 알 필요가있다.

v_record mytab%rowtype; 

을하지만 그것은 단지 예를 들어, 특정 열을 선택하는 경우 : 커서가 "mytab SELECT * FROM"반환하는 경우 당신은 사용할 수 있습니다 "select col1, col3 from mytab"그러면 구조를 수동으로 정의해야합니다.

type v_record_type is record (col1 number, col3 varchar2(10)); 
v_record v_record_type; 
관련 문제