Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak zbiorczo wstawić dane z kursora ref do tabeli tymczasowej w PL/SQL?

możesz użyć operacji BULK 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 już implementuje tę optymalizację dla regularnej pętli, więc możesz nie zauważyć znacznej poprawy po prostej LOOP...INSERT.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ResultSet getString kodowanie znaków dla znaków Unicode

  2. Reader.Read() nie odczytuje wierszy, mimo że ma wiersze

  3. Znajdowanie brakujących dat w sekwencji

  4. SQL*Plus :Wymuś zwrócenie kodu błędu

  5. Przechowuj obiekt Blob z Javy do BD:Rozmiar danych większy niż maksymalny rozmiar dla tego typu, gdy wyraźnie nie jest