Ir al contenido principal

Insertar Filas en una Tablas

La forma más simple de la sentencia INSERT inserta una fila en una tabla, proyendo valores en una linea de comando. La sintaxis es como sigue:

INSERT INTO tabla [(column [,column...])] VALUES (value [,value]);

-- COMANDO 1
INSERT INTO HR.REGIONS VALUES(5,'REGION 5');
-- COMANDO 2
INSERT INTO HR.REGIONS(REGION_ID, REGION_NAME) VALUES(6,'REGION 6');
-- COMANDO 3
INSERT INTO HR.REGIONS(REGION_NAME, REGION_ID) VALUES('REGION 8',8);
-- COMANDO 4
INSERT INTO HR.REGIONS(REGION_ID) VALUES(7);
-- COMANDO 5
INSERT INTO HR.REGIONS(REGION_ID, REGION_NAME) VALUES(9, NULL);

El primer comando provee valores para ambas columnas de la tabla REGIONS. Si la tabla tiene tres columnas, la sentencia fallaría porque se basa en notación posicional. La sentencia no dice que valores deberían ser insertados en que columnas. Depende de la posición de los valores. Se basa en la posición de los valores, su ordenación en el comando. Cuando la base de datos recibe una sentencia utilizando notación posicional, el orden de los valores debe coincidir con el orden de las columnas definidas en la tabla destino. La sentencia debería falla si el orden de los valores es erróneo. La base de datos fallaría porque los tipos de datos no coinciden.
El segundo y tercer comando define las columnas a ser pobladas y los valores con las que van a ser pobladas, el orden es el mismo que la definición de la tabla en el segundo comando y puede ser modificado a como se desee como se ve en el tercer comando. El orden de las columnas es irrelevante, los valores deben tener el mismo orden de las columnas definidas en el comando y deben ser las misma cantidad de valores que de columnas.
El cuarto comando nomina solo una columna y por lo tanto un solo valor todas las otras columnas serán nulas. Esta sentencia fallaría si la columna REGION_NAME no fuera nullable, el quinto ejemplo produce el mismo resultado, pero en este ejemplo si se nominan dos columnas y se especifica solo un valor y los demás campos se pone con el valor NULL.
Muy a menudo, una sentencia INSERT incluye funciones de casting o otro trabajo de edición.

INSERT INTO EMPLOYEES2(EMPLOYEE_ID, FIRST_NAME, LAST_NAME, HIRE_DATE, EMAIL)
VALUES(1001,'SANTIAGO','DE LA CRUZ DE LOS SANTOS','01-NOV-2013','EMAIL');

INSERT INTO EMPLOYEES2(EMPLOYEE_ID, FIRST_NAME, LAST_NAME, HIRE_DATE, EMAIL)
VALUES(1002,UPPER('santiago'),UPPER('de la cruz de los santos'),TO_DATE('01-10-2013','dd-mm-yy'), UPPER('email'));

Las filas insertadas con las dos sentencias anteriores son idénticas, pero la primera provee todos los valores literales exactos, la segunda realiza un trabajo de edición. Utilizar funciones para preprocesar valores antes de ser insertados puede ser particularmente importante cuando ejecuta script con sustitución de variables o en aplicación de usuarios finales donde ocurren variaciones al ingresar datos cuando los usuarios ingresan valores interactiva mente. Para insertar muchas filas mediante el comando INSERT, los valores de las filas deben ser generados mediante una consulta. Su sintaxis es la siguiente:

INSERT INTO tabla [ ( column [, column...] ) ] subquery;

Tenga en cuenta que esta sintaxis no utiliza la palabra VALUES; si la lista de columnas es omitida, entonces el subquery debe proveer valores para cada una columna en la tabla Target.
Para copiar cada fila de una tabla a otra, si la tabla tiene las mismas columnas, un comando como el siguiente es el necesario:

INSERT INTO REGIONS2
SELECT * FROM REGIONS;

Este comando inserta cada fila de tabla REGIONS en la tabla REGIONS2. No hay ninguna restricción en el subquery. Cualquier consulta devuelve un arreglo de dos dimensiones de filas, si la tabla Target tiene las columnas para recibirlas, la inserción sera un éxito. Este paso de información es necesario cuando tenermos que presentar a los usuarios resúmenes de información con algún formato especial, funciones de agregado, etc. o mejor conocido como desnormalización para que los usuarios puedan comprender fácilmente.

Cualquier sentencia SELECT, especificada como un subquery puede ser utilizado como fuente de datos para un INSERT. Esto permite la inserción de muchas filas. Alternativamente, utilizando la clausula VALUES podemos insertar una fila, los valores pueden ser literales solicitados por sustitución de variables.

Comentarios