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

Zbieranie zbiorcze i natychmiastowe wykonywanie w Oracle

Tak, technicznie możesz:

  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 wyraźnie stwierdza to w dokumentacji:

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

Ale możesz użyć bardziej użytecznego zdarzenia sposób, jeśli naprawdę POTRZEBUJESZ wykonać Dynamic SQL - słabe kursory ref. Będziesz miał dostęp do tak potężnej opcji jak LIMIT i będziesz mógł korzystać ze zbiorów rekordów.

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. Przykład APEX_ZIP

  2. W jaki sposób sterownik ODBC Oracle ładuje klienta Oracle?

  3. Jak wyeksportować wyniki zapytania do pliku CSV w SQLcl (Oracle)

  4. Konfigurowanie środowiska programistycznego do nauki języka PL/SQL

  5. Agent jest zablokowany