Bulk insert using FORALL in Oracle

僤鯓⒐⒋嵵緔 提交于 2019-12-11 15:14:50

问题


I am currently using the following code to do a bulk insert of 50 million rows:

declare cnt number;
BEGIN 
    select max(run_ver_issue_id) into cnt from "ABHINAV"."MV_RUN_VER_ISSUE";
    FOR x IN 1 .. 50000000 LOOP
         INSERT INTO "ABHINAV"."MV_RUN_VER_ISSUE" NOLOGGING ("RUN_VER_ISSUE_ID","CUST_ISSUE_ID","TITLE","ORIGINAL_ISSUE_ID","SOURCE_FILE_LINE","DISPLAY_TEXT","RUN_VER_ID","SANDBOX_SRC_FILE_ID","ACCOUNT_ID","ISSUE_STATE","CURRENT_SEVERITY","INSERT_TS","MODIFIED_TS","CWE_ID","TEMPLATE_FILE_ID","TEMPLATE_FILE_LINE","CURRENT_EXPLOIT_LEVEL","CNT","SOURCE_FUNCTION_PROTOTYPE","SOURCE_RELATIVE_LOCATION","SOURCE_SCOPE","PROCEDURE_NAME","PROCEDURE_HASH","PROTOTYPE_HASH","STATEMENT_HASH","STATEMENT_HASH_COUNT","STATEMENT_HASH_ORDINAL","SUBMODULE_PATH") VALUES (x+cnt,2,..);
    END LOOP;
END;

It takes almost 6 hours it to finish. The table does have an index on RUN_VER_ISSUE_ID, but still doesn't help. I tried using FORALL, getting an error PLS-00430: FORALL iteration variable X is not allowed in this context for the below code:

declare cnt number;
BEGIN 
    select max(run_ver_issue_id) into cnt from "ABHINAV"."MV_RUN_VER_ISSUE";
    FORALL x IN 1 .. 5
    INSERT INTO "ABHINAV"."MV_RUN_VER_ISSUE" NOLOGGING ("RUN_VER_ISSUE_ID","CUST_ISSUE_ID","TITLE","ORIGINAL_ISSUE_ID","SOURCE_FILE_LINE","DISPLAY_TEXT","RUN_VER_ID","SANDBOX_SRC_FILE_ID","ACCOUNT_ID","ISSUE_STATE","CURRENT_SEVERITY","INSERT_TS","MODIFIED_TS","CWE_ID","TEMPLATE_FILE_ID","TEMPLATE_FILE_LINE","CURRENT_EXPLOIT_LEVEL","CNT","SOURCE_FUNCTION_PROTOTYPE","SOURCE_RELATIVE_LOCATION","SOURCE_SCOPE","PROCEDURE_NAME","PROCEDURE_HASH","PROTOTYPE_HASH","STATEMENT_HASH","STATEMENT_HASH_COUNT","STATEMENT_HASH_ORDINAL","SUBMODULE_PATH") VALUES (x+cnt,2,.....);
END;

I would request you to please provide your suggestions and comments as to how I can speed this up.


回答1:


you may use this:

declare 
    p_array_size number := 100000; 
    type array is table of number;
    l_data ARRAY;
    cursor c is select rownum seq_no from dual connect by rownum <= p_array_size; 
    cnt number;
begin 
    open c;
    loop
        select max(RUN_VER_ISSUE_ID) into cnt from "ABHINAV"."MV_RUN_VER_ISSUE"; 
        fetch c bulk collect into l_data limit p_array_size;
        forall x IN 1 .. l_data.count
        insert into "ABHINAV"."MV_RUN_VER_ISSUE"("RUN_VER_ISSUE_ID","CUST_ISSUE_ID","TITLE","ORIGINAL_ISSUE_ID","SOURCE_FILE_LINE","DISPLAY_TEXT","RUN_VER_ID","SANDBOX_SRC_FILE_ID","ACCOUNT_ID","ISSUE_STATE","CURRENT_SEVERITY","INSERT_TS","MODIFIED_TS","CWE_ID","TEMPLATE_FILE_ID","TEMPLATE_FILE_LINE","CURRENT_EXPLOIT_LEVEL","CNT","SOURCE_FUNCTION_PROTOTYPE","SOURCE_RELATIVE_LOCATION","SOURCE_SCOPE","PROCEDURE_NAME","PROCEDURE_HASH","PROTOTYPE_HASH","STATEMENT_HASH","STATEMENT_HASH_COUNT","STATEMENT_HASH_ORDINAL","SUBMODULE_PATH") 
        values(l_data(x)+cnt,2,'0pJDFy1viDnN2Ku66XPl458gKakF4xz4pTawwoOZYCt0yR2YOw7tH1Mk3oKQ7ynuyasbBjBXr1teBbBdmIsJReIM3kbzWY7H4c6CVgVaw',NULL,230969,'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',74228,2,6120,8096,581270,'26-Sep-12 01:30:00','21-Feb-00 03:52:00',7531,1,NULL,5203,12726,'NAxr4jgRDRnDJiNKp10sfdntA8MKBU0xwWEInpm4yOTjvj5aRHt4fcNujL777cw74AuLEeEskCgzbkZNk2fcaTpBmYl8GtrUsB7KH5Wtfb4Elo8tfpRD7Eh7CjjkTdke7opjX5IBBEDSlxyinbcSLrtK7FuOBXDWM0tMGuq86VlZc27obCFBJyFSGi5FFgAA0PWETUoDR7HerxaisVUzmWuAb1HTKHgdTucNFzvtsxcCXKBwlpE3I7S8G2rhEGs2KOajFOoiB7ZbTPOFSNh7qUEY83GowgJo2lDChWr5tCtQqeJGUyrA2e8kXQ3Oh8Ov28C6muKtSbQFLFrJ0WlQYnDBvXqrHes0wT8rkHMEedJ1NIrf2HBBbI06p2qlO7RCr878gngE3bPiocJAvNHJfnkwnDMu06wda3ZkMmXBL1HTfdPyWfcL44OHzPsQdD4yr6HiM8vP7bzzxXNMBWDuDim8oeAc6o1jByEzgzyztvX6mas4UxAXG4Hm8iWodaoYwUixaFw4vr8qpp7jp8HfYbgC7J6pH4PQKV8krjvGdW3o33tHHBFS6Ytxobi31iSIcSZ2WQcfMzddLi61OmPB3zdKRABt57hj1wbIoQxHUsbsmtHRLZ3fT1V37RLQXfu3GzgjuPLYWxVdQRM7T4v5rhecY7c53ilFIr6KIfeIZ0DY5SGXLWqLoYfN7ZrHHEAONrId0GMeRO2Y0j4uF8j4RXJUpk81wUlFgnlGFkCSKwnXLK7aqYMPri4w0Bp0GixZ7E1JHWOlWDM40VXw5jBz7KnkClba6IaDJNgT8UeUDRHNhNVDiXIWSHLJAUzQqGN5RmG7X6ttpRgQPFpBPXX3UsA758WWSB7d4cNAniSp2jHMhSIl2kRkEnXkm8yuk0B08tDIIEZvDj6zvSsLqDuCmUwpUPcYdsofagnP8WIFoH1fKe4AbbzgUXzTCPgMjKkRvBKoXUgnpWtuNCoz2cosaxDDSOUEuBgX58UltaybzjqS1jMs3F3X3Ewjm2M0wWTeLjuXc3WLjF7OBQAvdDxLUQDRIGDFeeadqbe1gdC7ONr3gZY7w3mYwTJVlCaA0P4qRxhDUDItZNgLEpx4unTsO5Te51PD3YeicmqHlJbxknhjYpciOhfWYrmYGvCCl0xyga0hZ74EDiL1iLQjr1ADRa40SmUh1ufvfbZzcr5OpkttKmeeA75LjDIi58WvajJk0o1bKTgos7OTmhs5LT3cMZ3XJV4An4xtoCNGK4Ktreh6rXTnmHRCQ3HP2kfOTykNT2T8b6vS8rtnsqaLy862mTDBYKnqichIMvyN8fhEaQX0eP5iAs7jn2SrEybNAVOpYzaz6bRFVk1POPaHlkRysYOxGs2r8qumcpSs8ylD3YN2nPCc6OVpBCRw2YT1wozwOOA03r8hDNNz3ZhrNPY6EoW28mOApChU2QHcV63L4S5RiKJYOpAAOeApF5xGOuYnT8Lc4YUHVuwpNSZmxclNL6dzA3MJtCl88J3sZWcuigBgWiDjLUgeVnObW55nj7bYWkZB6UqmBCNNaWaIVkchCMtHNnvHnnoonLuBQTpnHdWy0kXUwY2o3Bd5jnDOQgEMVkiWgoOhRVMbt0cRvxQwSMYkkMyarg1OuYxAGhtY7Orsu1YEhs3MITDhzm4NDDEusaIXdDSaNl4u2ScTYKIsYchLBYo7fa2pvx4oUuaOHAi2oNPRR05zP5pqycSsDpnkEz6YIYBQiZaRgVRp407t83',48913,'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','Aox4fssjHKLaZwTS0Bq',57753,NULL,'C:\DOCS\TEMP75');
      exit when c%notfound;
    end loop;
    close c;   
    commit;
end;


来源:https://stackoverflow.com/questions/46046692/bulk-insert-using-forall-in-oracle

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!