Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да използвате Oracle PL/SQL за създаване на десет подобни таблици от дадена изходна таблица на Oracle

Имате нужда от dynamic SQL за него и с Oracle можем да използваме execute immediate за да го направите.

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

Демонстрацията може да се види тук

ИЛИ с един израз

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

Работи и тук



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Entity framework 6 и oracle

  2. Възможно ли е да се създаде тип асоциативен масив на Oracle извън пакет/процедура?

  3. Oracle 11g PHP oci_connect се проваля OCIEnvNlsCreate()

  4. Оптимална Oracle SQL заявка за завършване на групиране на множество колони в една таблица, съдържаща ~ 7 000 000 записа

  5. Обходете редовете на втора таблица, за да върнете набор от резултати