sql >> Databasteknik >  >> RDS >> Oracle

Hur man använder Oracle PL/SQL för att skapa tio liknande tabeller från en given Oracle-källtabell

Du behöver dynamic SQL för det och med Oracle kan vi använda execute immediate att göra det.

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 kan ses här

ELLER med ett enda påstående

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;
/

Fungerar även här



  1. CURRENT_DATE/CURDATE() fungerar inte som standardvärde för DATE

  2. Bästa sättet i MySQL eller Rails att få AVG per dag inom ett specifikt datumintervall

  3. Microsoft Office-produkten som vägrar att dö

  4. Mysql förbättrar SELECT-hastigheten