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

chèn vào ... chọn ... có truy vấn con hoặc không có thứ tự cột

Không, bạn không thể sử dụng truy vấn con để tạo danh sách cột như một phần của câu lệnh SQL.

Bạn có thể tạo câu lệnh đầy đủ từ từ điển dữ liệu:

select 'insert into cl ("'
  || listagg(column_name, '","') within group (order by column_id)
  || '") select "'
  || listagg(column_name, '","') within group (order by column_id)
  || '" from clt'
from user_tab_columns where table_name = 'CLT';

và sau đó sao chép và dán hoặc sử dụng SQL động từ một khối ẩn danh:

declare
  stmt varchar2(4000);
begin
  select 'insert into cl ("'
    || listagg(column_name, '","') within group (order by column_id)
    || '") select "'
    || listagg(column_name, '","') within group (order by column_id)
    || '" from clt'
  into stmt
  from user_tab_columns where table_name = 'CLT';

  dbms_output.put_line(stmt); -- to check and debug
  execute immediate stmt;
end;
/

Với một vài bảng giả:

create table clt (col1 number, col2 date, col3 varchar2(10));
create table cl (col3 varchar2(10), col1 number, col2 date);

insert into clt (col1, col2, col3) values (42, date '2018-07-12', 'Test');

insert into cl
select * from clt;

SQL Error: ORA-00932: inconsistent datatypes: expected NUMBER got DATE

chạy khối đó mang lại:

insert into cl ("COL1","COL2","COL3") select "COL1","COL2","COL3" from clt

PL/SQL procedure successfully completed.

select * from cl;

COL3             COL1 COL2      
---------- ---------- ----------
Test               42 2018-07-12

Bạn cũng có thể biến khối ẩn danh đó thành một thủ tục có hai tên bảng nếu đây là điều bạn có thể muốn làm thường xuyên (bạn đã nói rằng nó cần được sử dụng lại, nhưng điều đó có thể có nghĩa là đối với các bảng giống nhau và có thể là một khối trong một tập lệnh).

Bạn cũng có thể đi xa hơn và chỉ bao gồm các cột xuất hiện trong cả hai bảng hoặc xác minh các loại dữ liệu khớp chính xác; mặc dù đó là một công việc nhiều hơn một chút và có thể không cần thiết.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để phát triển một kích hoạt lỗi máy chủ sau trong Oracle?

  2. Có thể sử dụng truy vấn con trong câu lệnh Oracle ALTER không?

  3. thứ tự sql theo mệnh đề lựa chọn bên trong và nhóm theo cuộn lên

  4. Tôi cần thay đổi sql của mình như thế nào để có được thứ tôi muốn trong trường hợp này?

  5. Sao chép bảng từ một Oracle DB sang một DBLink đơn hướng khác