Sentencias de inserción multitabla

 

Desde la versión 9i podemos realizar este tiempo de inserciones. Podemos insertar en más de una tabla de forma paralela, en la misma sentencia, poniendo o no condiciones.

Utilizaremos la tabla EMPLEADOS para verlo más claramente:

 Name                                      Type                       

 DNI                                            VARCHAR2(20)               

 DEPARTAMENTO                        VARCHAR2(20)

 EDAD                                         NUMBER(2)

 Crearemos tres tablas con sólo los dos primeros campos para separar a los empleados por edad;

create table EMPLEADOS_20 as select DNI, DEPARTAMENTO from empleados where 1=0;

create table EMPLEADOS_30 as select DNI, DEPARTAMENTO from empleados where 1=0;

create table EMPLEADOS_40 as select DNI, DEPARTAMENTO from empleados where 1=0;

create table RESTO as select DNI, DEPARTAMENTO from empleados where 1=0;

 Si añadimos la condición WHERE la creará sin datos.

INSERT ALL

Como prueba insertaremos los datos de empleados en todas las tablas:

INSERT ALL

  INTO EMPLEADOS_20

  VALUES (DNI,DEPARTAMENTO)

  INTO EMPLEADOS_30

  VALUES (DNI,DEPARTAMENTO)

  INTO EMPLEADOS_40

  VALUES (DNI,DEPARTAMENTO)

  SELECT DNI,DEPARTAMENTO,EDAD FROM EMPLEADOS;

INSERT ALL WHEN (se insertan los valores especificados en todas las condiciones verdaderas.) 

Ahora repartiremos los empleados en las tablas dependiendo de su edad. Crearemos una tabla para recoger al resto de las edades superiores:

INSERT ALL

WHEN (EDAD<30) THEN

  INTO EMPLEADOS_20

  VALUES (DNI,DEPARTAMENTO)

WHEN (EDAD<40) THEN

  INTO EMPLEADOS_30

  VALUES (DNI,DEPARTAMENTO)

WHEN (EDAD<50) THEN

  INTO EMPLEADOS_40

  VALUES (DNI,DEPARTAMENTO)

ELSE

      INTO RESTO

  VALUES (DNI,DEPARTAMENTO)

SELECT DNI,DEPARTAMENTO,EDAD FROM EMPLEADOS;

INSERT FIRST WHEN (sólo se insertan los valores especificados en la primera condición verdadera) 

Si existe un empleado que tenga más de 50, aunque cumple la condición para ir a la tabla de EMPLEADOS_40 también,  se insertará en la tabla RESTO solamente, porque es la primera condición verdadera. 

INSERT FIRST

  WHEN (EDAD>50) THEN

    INTO RESTO

    VALUES (DNI,DEPARTAMENTO)

  WHEN (EDAD<30) THEN

    INTO EMPLEADOS_20

    VALUES (DNI,DEPARTAMENTO)

  WHEN (EDAD<40) THEN

    INTO EMPLEADOS_30

    VALUES (DNI,DEPARTAMENTO)

  WHEN (EDAD>40) THEN

    INTO EMPLEADOS_40

    VALUES (DNI,DEPARTAMENTO)

  SELECT DNI,DEPARTAMENTO,EDAD FROM EMPLEADOS 

Limitaciones:

La suma del total de las columnas INTO no puede exceder 999

Sólo funciona en tablas, no en vistas o vistas materializadas.

Artículos relaccionados