在discussion約多行插入到Oracle兩種方法進行了論證:插入多行到Oracle
第一:
insert into pager (PAG_ID,PAG_PARENT,PAG_NAME,PAG_ACTIVE)
select 8000,0,'Multi 8000',1 from dual
union all select 8001,0,'Multi 8001',1 from dual
二:
INSERT ALL
INTO t (col1, col2, col3) VALUES ('val1_1', 'val1_2', 'val1_3')
INTO t (col1, col2, col3) VALUES ('val2_1', 'val2_2', 'val2_3')
INTO t (col1, col2, col3) VALUES ('val3_1', 'val3_2', 'val3_3')
.
.
.
SELECT 1 FROM DUAL;
誰能爭論偏好使用一個在另一個?
P.S.我沒有自己做任何研究(甚至解釋計劃),所以任何信息或意見將不勝感激。
謝謝。
同意結論,但是: Nitpick:這些INSERT語句不返回任何值,因此在「插入可能發生之前」或「逐行」之前發生任何事情都沒有意義。無論如何,他正在使用UNION ALL,所以如果這就是你所想的那樣,就沒有任何問題。 – 2009-05-20 02:38:31
一個快速的「解釋計劃」顯示,具有4行int SCOTT.EMP的INSERT ALL的成本爲2(雙選中唯一CPU成本爲1的多表插入),而UNION ALL變體具有成本8(每個SELECT導致另一個2)。它沒有排序,但結果和單個(至少FAST DUAL)的組合會選擇哪個導致成本。 – Kosi2801 2009-05-20 06:58:16