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

Jak używać Oracle PL/SQL do tworzenia dziesięciu podobnych tabel z danej tabeli źródłowej Oracle?

Potrzebujesz dynamic SQL w tym celu, a z Oracle możemy użyć execute immediate aby to zrobić.

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 można zobaczyć tutaj

LUB za pomocą jednego oświadczenia

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

Działa również tutaj



  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:Aktualizacja kolumny tabeli przy użyciu ROWNUM w połączeniu z klauzulą ​​ORDER BY

  2. Jak ustawić warunkową wartość DEFAULT do kolumny w Oracle bez użycia wyzwalaczy?

  3. Funkcja NUMTODSINTERVAL() w Oracle

  4. Jak zrobić top 1 w Oracle?

  5. Co to jest dokładnie BLOB w kontekście DBMS