Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да вмъкнете групово данни от референтен курсор във временна таблица в PL/SQL

можете да използвате BULK операции върху 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 обаче вече прилага тази оптимизация за обикновен цикъл, така че може да не видите много подобрение от обикновения 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. Инструкция за вмъкване на Oracle, ако не съществува

  2. SQL Oracle - Комбиниране на последователни редове с филтър

  3. Автоматично увеличение в Oracle без използване на тригер

  4. Предава стойност, съхранена в PL/SQL променлива, в клауза IN

  5. Динамично генериране на ламбда израз с константи от променливи