簡體   English   中英

如何將 Oracle 中一張表的所有數據傳輸到另一張表?

[英]How to transfer all data from one table to another table in Oracle?

如何在 oracle 中將數據從一個表傳輸到另一個表? 兩個表中的所有字段都是相同的。

insert into second_table (column_1, column_2, column_3) 
values
select column_1, column_2, column_3
from first_table;
commit;

上述方法只會將數據寫入第二張表,不會刪除第一張表中的數據。

oracle庫中有沒有可以解決這個問題的function?

因為你不能只用一個命令來做到這一點,你必須使用兩個: insert + delete

請注意,您發布的語法無效; 在這種情況下,您不能使用values關鍵字。

所以:

insert into second_table (column_1, column_2, column_3) 
select column_1, column_2, column_3
  from first_table;

truncate table first_table;

由於truncate被認為是 DDL,因此它會隱式提交 - 您不必顯式commit

但是,請注意,如果存在會阻止從first_table中刪除這些行的外鍵約束,並且沒有指定on delete cascade ,則truncate (或delete可能會失敗

為什么您不只是查看原始表並使用 WHERE 子句“刪除”您不想要的記錄?

要擴展 Littlefoot 響應,您可能需要考慮使用 /*+ APPEND */ 來加快插入速度。

至於約束,您可以根據需要禁用它們。 這是一個可以幫助您入門的示例。 完成后,如果需要,您應該啟用它們。


DECLARE 
 sql_stmt varchar2(255);
 t1 pls_integer;
BEGIN
   t1 := dbms_utility.get_time; 
FOR c IN
    (
      SELECT * 
        FROM user_constraints c
       WHERE -- c.constraint_type = 'P' AND
          c.table_name = 'HOLIDAYS')
  LOOP
    sql_stmt:='ALTER TABLE '||c.table_name||
                      ' DISABLE CONSTRAINT '||c.constraint_name;
   dbms_output.put_line(sql_stmt);
   EXECUTE IMMEDIATE sql_stmt;
  END LOOP;

dbms_output.put_line((dbms_utility.get_time - t1)/100 || ' seconds');

END;  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM