sql >> データベース >  >> RDS >> Oracle

即時実行での一括収集制限

    EXECUTE IMMEDIATE構文では、一括収集句でLIMITを使用できないようです

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


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

    カーソルとFETCH..LIMITコマンドをOPEN..FORコマンドと一緒に使用すると、
    次のようになります:

    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. MySQLパフォーマンスチートシート

    2. 新しいテーブルを作成するときに外部キーを追加するにはどうすればよいですか?

    3. ß と ss を区別する SQL クエリ

    4. innodbテーブルを最適化する