Skip to main content

INSERT-INTO 與 SELECT-INTO 使用上差異

INSERT-INTO 與 SELECT-INTO 猛一看似乎都可以用來將資料表對考
但實務上,卻有些差異。
若要 完整 複製還是選擇 select into 為佳。

INSERT INTO

insert into 是用來 copy then insert 到另一個 table
=> 背後是每筆 record 依次 insert
所以 nextval('seq') 會執行多次

INSERT INTO table2 (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM table1
WHERE condition;
  • 這邊在 insert 時可以使用 function 在 select 句子中,而相關 function 會 依次 執行。 例如:
INSERT INTO APPLICATION_FORM (ID, APPLIER, ISSUE_DATE, TYPE) 
SELECT nextval('seq_APPLICATION_FORM'), APPLIER, ISSUE_DATE, TYPE FROM tmp_APPLICATION_FORM
WHERE 0=0;

SELECT INTO

Select into 可用來 copy table
=> 背後是整個 table 單次性轉移
若 select 中使用 nextval('seq') 僅會執行一次

SELECT column1, column2, column3, ...
INTO newtable [IN externaldb]
FROM oldtable
WHERE condition;
  • 須注意 select 出的是 column value, 不可使用 function (ex: nexval('seq_of_table_X')),因為是單次執行,所以 function 只會執行一次。而造成所有 records 的值都相同。