sql >> Database teknologi >  >> RDS >> Oracle

Massesaml ind og udfør øjeblikkeligt i Oracle

Ja, teknisk set kan du:

  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 

Og Oracle siger tydeligt dette i dokumentationen:

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

Men du kan bruge mere nyttig måde begivenhed, hvis du virkelig har brug for at udføre Dynamic SQL - svage ref markører. Du vil have adgang til en så kraftfuld mulighed som LIMIT og vil være i stand til at bruge samlinger af poster.

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. Tilføj manglende data fra forrige måned eller år kumulativt

  2. Hvordan VÆLGER man de nyeste fire varer pr. kategori?

  3. Overtrædelse af UNIQUE KEY-begrænsning på INSERT WHERE COUNT(*) =0 på SQL Server 2005

  4. SCD Type 2