Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cách sử dụng Oracle PL / SQL để tạo mười bảng tương tự từ một bảng nguồn Oracle nhất định

Bạn cần dynamic SQL đối với nó và với Oracle, chúng ta có thể sử dụng execute immediate để làm như vậy.

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

Bạn có thể xem bản trình diễn tại đây

HOẶC với một câu lệnh duy nhất

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

Cũng hoạt động tại đây



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 50 Sắc thái của Kỳ thi Chứng chỉ Cơ sở dữ liệu Oracle

  2. thu thập dữ liệu tổng hợp hàng năm để truy cập nhanh sau này

  3. ORDER BY với truy vấn bên trong, đưa ra ORA-00907 bị thiếu dấu ngoặc đơn bên phải

  4. Lỗi chèn Oracle:không phải là tháng hợp lệ

  5. Oracle getConnection chậm