sql >> データベース >  >> RDS >> Oracle

別のプロシージャから sys_refcursor を取得して一括収集し、別のテーブルに挿入する

    BULK が必要だと理解しています 要件を完了するための操作。あなたがそれを行う方法を以下に示します。コメントもインラインで読んでください。

    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:テストされていません。




    1. エラー'指定された場所にサブレポートが見つかりませんでした。サブレポートが公開されていること、および名前が正しいことを確認してください。

    2. PHP、テキストは新しい行なしでデータベースからエコーアウトされ、すべて1つのピースになります

    3. mysqlsprocのテーブル名に変数を使用する

    4. macOSのPostgreSQLログはどこにありますか?