2012-05-03 2 views
1

j'ai un proc stocké Procedure1,procédure stockée Oracle - boucle dans le curseur

  1. Dans Procedure1, j'appelle une autre procédure Procedure2 qui retourne sys_refcursor ProcResult2.
  2. je dois parcourir à travers chaque ligne de ce curseur et insérer les données dans une table

Le code

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

Toute idée, conseils sur la façon d'obtenir la fonctionnalité 2.? C'est traverser chaque ligne retournée dans ProcResult2 et insérer dans une nouvelle table.

Répondre

2

Vous êtes presque là:

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; 

Vous devez déclarer la v_record variable une structure qui correspond à ce que le curseur revient - à savoir que vous devez connaître la structure de l'enregistrement du curseur lorsque vous créez la procédure. Si le curseur retourne « select * from mytab » vous pouvez utiliser:

v_record mytab%rowtype; 

Mais si elle ne sélectionne certaines colonnes par exemple "select col1, col3 from mytab", alors vous devrez définir manuellement la structure:

type v_record_type is record (col1 number, col3 varchar2(10)); 
v_record v_record_type; 
Questions connexes