sql >> Databáze >  >> RDS >> Oracle

Jak hromadně vložit data z referenčního kurzoru do dočasné tabulky v PL/SQL

můžete použít BULK operace na REF CURSOR:

SQL> CREATE GLOBAL TEMPORARY TABLE gt (ID NUMBER);

Table crÚÚe.

SQL> DECLARE
  2     l_refcursor SYS_REFCURSOR;
  3     TYPE tab_number IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
  4     l_data tab_number;
  5  BEGIN
  6     OPEN l_refcursor FOR
  7        SELECT ROWNUM FROM dual CONNECT BY LEVEL <= 1e6;
  8     LOOP
  9        FETCH l_refcursor BULK COLLECT
 10           INTO l_data LIMIT 100;
 11
 12        FORALL i IN 1..l_data.count
 13           INSERT INTO gt VALUES (l_data(i));
 14
 15        EXIT WHEN l_refcursor%NOTFOUND;
 16
 17     END LOOP;
 18     CLOSE l_refcursor;
 19  END;
 20  /

ProcÚdure PL/SQL terminÚe avec succÞs.

Oracle 10g však již implementuje tuto optimalizaci pro běžnou smyčku, takže od jednoduché smyčky LOOP...INSERT možná neuvidíte mnoho zlepšení.



  1. vyhledávání z více tabulek pomocí jednoho klíčového slova v mysql

  2. Jak může public_dependency obsahovat odkazy na objekty, které nejsou v all_objects?

  3. DELETE vše, kde omezení cizího klíče MySQL neselže

  4. mySQL DataSource v sadě Visual Studio 2012