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

LIMIT ZBIORÓW ZBIORCZYCH w WYKONAJ NATYCHMIAST

Wygląda na to, że składnia EXECUTE IMMEDIATE nie pozwala na LIMIT w klauzuli zbiorczego zbierania

http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/executeimmediate_statement.htm#CJACGJJG


bulk_collect_into_clause
http://docs.oracle .com/cd/E11882_01/appdev.112/e25519/returninginto_clause.htm#CJAIAGHJ

Możesz użyć kursora i komendy FETCH .. LIMIT razem z komendą OPEN..FOR,
w ten sposób:

DECLARE
  ....
  cur sys_refcursor;
BEGIN
  v_query := 'SELECT level AS x FROM dual CONNECT BY LEVEL <=10';
  OPEN cur FOR v_query;
  LOOP
     FETCH cur BULK COLLECT INTO collection LIMIT 3;
     EXIT WHEN collection.COUNT = 0;

     /* Process data from `collection` */

  END LOOP;
  CLOSE cur;
END;

Przykład:

DECLARE
  TYPE col_typ IS table of NUMBER;
  collection col_typ;
  v_query varchar2(3000); 
  cur sys_refcursor;
  i int := 0;
  x int;
BEGIN
  v_query := 'SELECT level AS x FROM dual CONNECT BY LEVEL <=10';

  OPEN cur FOR v_query;
  LOOP
     FETCH cur BULK COLLECT INTO collection LIMIT 3;
     EXIT WHEN collection.COUNT = 0;

     /* Process data from `collection` */
     i := i + 1;
     DBMS_OUTPUT.PUT_LINE('==== Batch nbr #' || i );
     FOR x IN 1 .. collection.COUNT LOOP
       DBMS_OUTPUT.PUT_LINE( collection( x ) );
     END LOOP;
  END LOOP;
  CLOSE cur;
END;
/

Wynik:

==== Batch nbr #1
1
2
3
==== Batch nbr #2
4
5
6
==== Batch nbr #3
7
8
9
==== Batch nbr #4
10


  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 ListaGG, 3 najczęściej występujące wartości, podane w jednej kolumnie, pogrupowane według ID

  2. Jak połączyć operator IN ze stanem LIKE (lub najlepszym sposobem na uzyskanie porównywalnych wyników)

  3. Wyjątek formatu daty Oracle w usługach SQL Server Reporting Services

  4. Dotyczy to wierszy Oracle JDBC batchUpdate, których dotyczy to zawsze -2 (Statement.SUCCESS_NO_INFO)

  5. przekaż tablicę liczb całkowitych do procedury Oracle przez c#