Sentencias de inserción en varias tablas
INSERT ALL
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.
Tomado de www.zonaoracle.com