Saltar al contenido

Sentencias de insercion 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:

1
2
3
4
5
 
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;

1
2
3
4
5
6
7
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
  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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
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. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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.

– Sentencias de insercion multitabla.