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

Oracleで一括収集して即時実行

    はい、技術的には次のことができます:

      1  SQL> declare
      2   type x is table of t.id%type index by pls_integer;
      3   xx x;
      4  begin
      5   execute immediate
      6   'select id from t' bulk collect into xx;
      7   dbms_output.put_line(xx.count);
      8  end;
      9  /
    426 
    

    そして、オラクルはこれをドキュメントで明確に述べています:

    http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/executeimmediate_statement.htm

    ただし、動的SQL(弱い参照カーソル)を実行する必要がある場合は、より便利な方法イベントを使用できます。 LIMITなどの強力なオプションにアクセスでき、レコードのコレクションを使用できるようになります。

    SQL> declare
      2   type x is table of t%rowtype index by pls_integer;
      3   xx x;
      4   c sys_refcursor;
      5  begin
      6    open c for 'select * from t';
      7    loop
      8      fetch c bulk collect into xx limit 100;
      9      dbms_output.put_line(xx.count);
     10      exit when c%notfound;
     11    end loop;
     12    close c;
     13  end;
     14  /
    100                                                                             
    100                                                                             
    100                                                                             
    100                                                                             
    26   
    


    1. PostgreSQLでのデータベースの一覧表示と切り替え

    2. SQLServerでDMLトリガーを作成する

    3. MySQLレプリケーションを使用したライブマイグレーション

    4. Oracleで文字列内の単語数をカウントするにはどうすればよいですか?