Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

तत्काल निष्पादन में थोक संग्रह सीमा

ऐसा लगता है कि EXECUTE IMMEDIATE सिंटैक्स LIMIT को बल्क कलेक्ट क्लॉज में अनुमति नहीं देता

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

आप एक कर्सर और FETCH का उपयोग कर सकते हैं .. OPEN के साथ LIMIT कमांड एक साथ... कमांड के लिए,
इस तरह:

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;

उदाहरण:

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;
/

परिणाम:

==== 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 उपयोगकर्ता बनाएँ और विशेषाधिकार प्रदान करें:सिंटैक्स और उदाहरण

  2. एक विशिष्ट दिनांक प्रारूप की नियमित अभिव्यक्ति

  3. hibernate.jpa.criteria.BasicPathUsageException:मूल प्रकार की विशेषता में शामिल नहीं हो सकता

  4. संख्या कॉलम में Oracle 2 हाइफ़न?

  5. Oracle:मान्य माह नहीं है