En el discussion acerca de múltiples filas se insertan en el oráculo dos enfoques se demostraron:Insertar varias filas en Oracle
Primero:
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
Segundo:
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;
¿Alguien podría argumentar la preferencia de usar uno sobre otro?
P.S. No hice ninguna investigación yo mismo (incluso el plan de explicación), por lo que cualquier información u opinión sería apreciada.
Gracias.
De acuerdo con la conclusión, pero: Nitpick: estas instrucciones INSERT no devuelven ningún valor, por lo que no tiene sentido decir que algo sucede "antes de que la inserción pueda suceder" o "línea por línea". De todos modos, él está usando UNION TODO para que no haya ningún problema, si eso es lo que estabas pensando. –
Un rápido "plan de explicación" muestra que INSERTAR TODO con 4 líneas int SCOTT.EMP tiene un costo de 2 (1 inserción de varias tablas con el único costo de CPU en la doble selección) mientras que la variante UNION ALL tiene un costo de 8 (con cada SELECT causando otros 2). No es la ordenación sino la combinación de los resultados y los selectores únicos (al menos FAST DUAL) que están causando el costo. – Kosi2801