SQL – Inserción en múltiples tablas

Oracle ha incluido una extensión del comando INSERT, de tal manera que usando solamente una sentencia sql, puedan ser insertados registros en diferentes tablas o destinos. Este tipo de insert multitabla es recomendable en tareas de transformación de datos via sql, principalmente cuando se llevan a cabo tareas de preparación de datos en datawarehouse y data mining; ya que ante los volúmenes de datos que generalmente se manejan para estas áreas, se reduce el número de sentencias a ejecutar.

Insert sin condiciones

Supongamos que se tiene la tabla ALUMNO con la siguiente descripción

NOMBRE VARCHAR2(25)
APELLIDO VARCHAR2(25)
LUGAR_NACIMIENTO NUMBER
FECHA_NACIMIENTO DATE
MATERIAS_CURSADAS NUMBER
MATERIAS_APROBADAS NUMBER
MATERIAS_VALIDADAS NUMBER
PROMEDIO_NOTAS NUMBER

la cual tiene 6 registros únicamente

y se tienen 2 tablas históricas:

HIST_MATERIAS

IDALUMNO NUMBER
ANIO NUMBER
CURSADAS NUMBER
APROBADAS NUMBER
VALIDADAS NUMBER

HIST_PROMEDIOS

IDALUMNO NUMBER
ANIO NUMBER
PROMEDIO_NOTAS NUMBER(4,2)

Se desea cada fin de año consolidar los datos de los alumnos en el histórico, en la tabla HIST_MATERIAS se guardarán datos sobre las materias cursadas en cada año; y en la tabla HIST_PROMEDIOS se guardarán los datos sobre el promedio de calificaciones en cada año, para cada alumno.

Ahora, vamos ahora a incorporar la sentencia sql para esta situación.

INSERT ALL
INTO hist_materias VALUES ( id, 2005, materias_cursadas, materias_aprobadas,materias_validadas
)
INTO hist_promedios VALUES (id, 2005, promedio_notas)
SELECT * FROM alumno;
12 rows created

Podemos ver que existen dos clausula INTO, que básicamente identifican las tablas odestios a los que se desea insertar registros. En la tabla hist_materias se insertarán los datos de materias cursadas, materias aprobadas y materias validadas para cada alumno; y en la tabla hist_promedios se insertará para cada alumno el promedio obtenido en el año (en este caso año 2005).

Ahora bien, la sentencia SELECT retorna 6 registros. Puede decirse que cada registro se convierte en dos inserciones, una para cada tabla. Es por eso que finalmente la sentencia SELECT ALL retorna la creación de 12 filas.

Por qué se le llama a este tipo de insert, insert sin condiciones? Muy sencillo, no hay restricciones para hacer la inserción en las tablas hist_materias e hist_promedios.

Escrito por: Arturo T.
atocarrunchot at gmail dot com

Leave a Reply