Insert A Partir De Un Select Oracle

INSERT A PARTIR DE UN SELECT en Oracle es una forma rápida de copiar datos de una tabla a otra. En lugar de insertar registros individualmente, tomas un conjunto de datos (obtenido con una consulta SELECT) e insertas todos esos resultados directamente en otra tabla.
¿Cómo funciona?
La sintaxis básica es la siguiente:
INSERT INTO tabla_destino (columna1, columna2, ...) SELECT columna_a, columna_b, ... FROM tabla_origen WHERE condición;
Must Read
Desglosemos cada parte:
INSERT INTO tabla_destino (columna1, columna2, ...): Especifica la tabla en la que vas a insertar los datos. tabla_destino es el nombre de la tabla. Entre paréntesis, indicas las columnas de la tabla destino a las que se insertarán los datos. El orden es importante.SELECT columna_a, columna_b, ... FROM tabla_origen: Esta es la consulta que selecciona los datos. tabla_origen es la tabla de donde provienen los datos. columna_a, columna_b, etc., son las columnas de la tabla origen que quieres insertar.WHERE condición: (Opcional) Filtra los datos que se insertarán. Solo se insertarán las filas que cumplan la condición.
Ejemplo sencillo
Imagina que tienes dos tablas: empleados_temp y empleados_permanentes. Quieres mover todos los empleados temporales que llevan más de un año en la empresa a la tabla de empleados permanentes.

La tabla empleados_temp tiene las columnas: id_empleado, nombre, fecha_contratacion.
La tabla empleados_permanentes tiene las columnas: id_empleado, nombre, fecha_contratacion.

La consulta sería algo así:
INSERT INTO empleados_permanentes (id_empleado, nombre, fecha_contratacion) SELECT id_empleado, nombre, fecha_contratacion FROM empleados_temp WHERE fecha_contratacion < ADD_MONTHS(SYSDATE, -12);

Esta consulta insertará en empleados_permanentes el id_empleado, el nombre y la fecha_contratacion de todos los empleados de la tabla empleados_temp cuya fecha_contratacion sea anterior a hace 12 meses.
Consideraciones importantes
- Tipos de datos: Las columnas correspondientes en la tabla origen y la tabla destino deben tener tipos de datos compatibles. Si no lo son, Oracle intentará hacer una conversión implícita, pero es mejor asegurarse de que sean compatibles explícitamente.
- Número de columnas: El número de columnas especificadas en la parte
INSERT INTOdebe coincidir con el número de columnas seleccionadas en la parteSELECT. - Restricciones: Las restricciones de la tabla destino (como claves primarias, claves foráneas o NOT NULL) deben cumplirse. Si intentas insertar datos que violen estas restricciones, la inserción fallará.
- Rendimiento: INSERT A PARTIR DE UN SELECT es generalmente más eficiente que insertar registros individualmente, especialmente para grandes volúmenes de datos.
En resumen, INSERT A PARTIR DE UN SELECT es una herramienta poderosa para copiar datos entre tablas en Oracle, pero es crucial entender cómo funciona y tener en cuenta las consideraciones importantes para evitar errores y asegurar la integridad de los datos.
