sql >> Database >  >> RDS >> Oracle

Hoe Oracle PL/SQL te gebruiken om tien vergelijkbare tabellen te maken van een bepaalde Oracle-brontabel?

Je hebt dynamic SQL nodig ervoor en met Oracle kunnen we execute immediate . gebruiken om dit te doen.

declare
  type array_t is table of varchar2(10);
  array array_t := array_t();
  lo_stmt varchar2(2000);
begin
  select distinct kind
    bulk collect into array
    from all_data;
  
  for i in 1..array.count loop
    --dbms_output.put_line(array(i));
    lo_stmt :=
    'create table '||array(i)||'_data '||
    'as '||
    'select kind,time_period,amount '||
    '  from all_data '||
    ' where kind = '''||array(i)||'''';
    --dbms_output.put_line(lo_stmt);
    execute immediate lo_stmt;
  end loop;
end;
/

Demo is hier te zien

OF met een enkele verklaring

declare
  type array_t is table of varchar2(4000);
  array array_t := array_t();
  lo_stmt varchar2(2000);
begin
  select distinct 'create table '||kind||'_data '||
    'as '||
    'select kind,time_period,amount '||
    'from all_data '||
    'where kind = '''||kind||''''
    bulk collect into array
    from all_data;
  
  for i in 1..array.count loop
    --dbms_output.put_line(array(i));
    execute immediate array(i);
  end loop;
end;
/

Werkt ook hier



  1. MySQL-datumvergelijkingsfilter

  2. Hoe de controller-variabele te gebruiken in Views + cakephp

  3. Wat is de volgorde van records in een tabel met een samengestelde primaire sleutel

  4. SQL - selecteer rijen met dezelfde waarde in twee kolommen