Oracle
 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 

И Oracle ясно заявява това в документацията:

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

Но можете да използвате по-полезно събитие, ако наистина ТРЯБВА да изпълните Dynamic 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. 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. Въведение в Native Dynamic SQL в Oracle Database

  3. Как да настроите или тествате производителността на PLSQL кода в Oracle D2k Forms

  4. Как да върнете броя на секундите след полунощ в базата данни на Oracle

  5. Топ 5 отнемащи време SQL заявки в Oracle