sql >> Database >  >> RDS >> Oracle

Ophalen en bulksgewijs verzamelen van sys_refcursor vanuit een andere procedure en invoegen in een andere tabel

Ik begrijp dat je een BULK nodig hebt verrichting om uw vereiste te voltooien. Bekijk hieronder hoe je dat kunt doen. Lees ook de opmerkingen inline.

create or replace procedure ins_act
as 

 l_result                sys_refcursor;

 --Created a RECORD type to hold the result of the SYS_REFCURSOR
 TYPE RSLT IS RECORD
 (

 l_id1                   varchar2(32),
 l_id2                   varchar2(32),
 l_id3                   varchar2(32),
 l_pid                   varchar2(16),
 l_ac                    varchar2(32),
 l_activity_date         varchar2(32),
 l_file_id               varchar2(64)
 ) ;

 --Created associative array to hold the result
 Type v_reslt is table of RSLT index by PLS_INETEGER;

 --Variable to Record type
 var_reslt   v_reslt;

begin
          -- Procedure to pull the get records 
          get_act(l_result);

          -- Bulk fetch
          Loop

          fetch l_result bulk collect into  var_reslt limit 100;         

          --Bulk Insert     
          FORALL I INTO 1..var_reslt.count SAVE EXCEPTIONS
          insert into temp(id1,
                           id2,
                           id3,
                           platform_id,
                           activity_code,
                           update_timestamp,
                           file_id)          
          values 
             (to_char(to_date(var_reslt(i).l_id1,'mm/dd/yyyy'),'mm/dd/yyyy'),
              var_reslt(i).l_id2,
              var_reslt(i).l_id3,
              0,
              var_reslt(i).l_ac,
              var_reslt(i).l_activity_date,
              var_reslt(i).l_file_id);

         exit when l_result%notfound; 

      end loop;

   Commit;

  close l_result;

Exception
 WHEN OTHERS
   THEN    
         --Bulk Exception handling
         FOR indx IN 1 .. SQL%BULK_EXCEPTIONS.COUNT
         LOOP
            DBMS_OUTPUT.put_line (
                  SQL%BULK_EXCEPTIONS (indx).ERROR_INDEX
               || ‘: ‘
               || SQL%BULK_EXCEPTIONS (indx).ERROR_CODE);
         RAISE;          
end;
/

PS:Niet getest.




  1. Hoe records te filteren met de geaggregeerde functie COUNT

  2. Hoe u de begin- en eindfunctie voor zomertijd kunt maken in SQL Server

  3. Zoek de datum en tijd die het dichtst bij de opgegeven datum en tijd ligt in de mysql-query

  4. 10 SP_EXECUTESQL Gotcha's om te vermijden voor een betere dynamische SQL