La sentencia INSERT permite agregar nuevas filas de datos a las tablas existentes. Está sentencia tiene como sintaxis genérica.
INSERT INTO archivtabla_o_vista [(archivlista_de_columnas)] VALUES (archivlista_de_valores_de_datos)
Para insertar datos en una relación, se específica la tupla que se desea insertar o se formula una consulta cuyo resultado sea el conjunto de tuplas que se desea insertar. Obviamente, los valores de los atributos de las tuplas que se inserten deben pertenecer al dominio de los atributos. De igual modo, las tuplas insertadas deben ser de la aridad -archivnúmero de atributos- correcta.
Considere el siguiente Diagrama Entidad Relación y su correspondiente script Oracle
CREATE TABLE departamento (
idDepartamento NUMBER(3),
nombre CHAR(15) NOT NULL,
ciudad CHAR(10) NOT NULL,
CONSTRAINT DOM_Ciudad
CHECK (ciudad IN ('Veracruz', 'Xalapa', 'Orizaba', 'Regional')),
CONSTRAINT PK_Departamento PRIMARY KEY (idDepartamento)
);
CREATE TABLE empleado(
idEmpleado NUMBER(3),
rfc CHAR(14),
nombreEmpleado CHAR(40) NOT NULL,
oficio CHAR(11) NOT NULL,
cargo CHAR(15) NOT NULL,
jefe NUMBER(3),
ingreso DATE NOT NULL,
salario NUMBER(10,2),
comision NUMBER(10,2),
idDepartamento NUMBER(3) NOT NULL,
CONSTRAINT DOM_Empleado_Salario CHECK ( salario > 0 ),
CONSTRAINT PK_Empleado PRIMARY KEY (idEmpleado),
CONSTRAINT AK_Empleado UNIQUE (rfc),
CONSTRAINT FK_Empleado_Jefe FOREIGN KEY (jefe)
REFERENCES Empleado,
CONSTRAINT FK_Empleado FOREIGN KEY (idDepartamento)
REFERENCES Departamento,
CONSTRAINT DOM_Empleado_NombreEmpleado
CHECK (nombreEmpleado = NLS_UPPER(nombreEmpleado))
);
Considere los siguientes datos
idDepartamento | Departamento | Ciudad |
1 | Ventas | Veracruz |
2 | Ventas | Xalapa |
3 | Cobranza | Veracruz |
4 | Cobranza | Xalapa |
5 | Credito | Orizaba |
6 | Credito | Veracruz |
7 | Credito | Xalapa |
Un formato posible es:
INSERT INTO nombre-tabla VALUES (serie de valores);
El orden en el que se asignen los valores en la cláusula VALUES tiene que coincidir con el orden en que se definieron las columnas en la creación del objeto tabla, dado que los valores se asignan por posicionamiento relativo.
INSERT INTO departamento VALUES (1,'Ventas','Veracruz');
INSERT INTO departamento VALUES (2,'Ventas','Xalapa');
INSERT INTO departamento VALUES (3,'Cobranza','Veracruz');
INSERT INTO departamento VALUES (4,'Cobranza','Xalapa');
INSERT INTO departamento VALUES (5,'Credito','Orizaba');
INSERT INTO departamento VALUES (6,'Credito','Veracruz');
INSERT INTO departamento VALUES (7,'Credito','Xalapa');
Otra forma de usar la sentecia INSERT es:
INSERT INTO nombre-tabla (columna1, columna2...)
VALUES (valor1, valor2...);
En este caso los valores se asignarán a cada una de las columnas mencionadas por posicionamiento relativo.
Es necesario que por lo menos se asignen valores a todas aquellas columnas que no admiten valores nulos (NOT NULL) en la tabla .
INSERT INTO empleado (idempleado, rfc, nombreempleado, oficio, cargo, jefe, ingreso,
salario, comision, idDepartamento)
VALUES (12, 'ROTL790411FRT', 'ROMERO TERRENOS, LUIS', 'Ingeniero', 'Director', NULL,
'01/01/2006', 7000, 0.2, 4);
CREATE GLOBAL TEMPORARY TABLE detalle (
rfc CHAR(14) PRIMARY KEY,
nombreEmpleado CHAR(40) NOT NULL,
salarioNeto NUMBER(10,2)
) ON COMMIT PRESERVE ROWS;
INSERT INTO detalle
SELECT rfc, nombreEmpleado, salario + salario*comision
FROM empleado
WHERE comision > 0;
Ejemplo: Usaremos la cotización del dolar para solventar obligaciones el archivo original contiene valores de 1990 a la fecha actual. Separemos esta tabla en cotizaciones mayores de 14 pesos, entre 13 a 14 y otras
Nota: Para operaciones al mayoreo entre bancos, casas de bolsa, casas de cambio, particulares. Este tipo de cambio es aplicable para liquidar operaciones el segundo día hábil bancario inmediato siguiente a la fecha de su concertación. Los valores son los prevalecientes en el mercado a las horas referidas. Los niveles máximo y mínimo son posturas de venta durante el periodo de observación (9:00-13:30 hrs). El Banco de México da a conocer estos tipos de cambio a las 13:30 horas todos los días hábiles bancarios. Fuente: Reuters Dealing 3000 Matching
Descarcar la serie de datos de precio máximo a la venta y ejecute las siguientes sentencias
CREATE TABLE dolar (
fecha DATE,
precio NUMBER(8,4)
);
CREATE TABLE dolar15 (
fecha DATE,
precio NUMBER(8,4)
);
CREATE TABLE dolar13 (
fecha DATE,
precio NUMBER(8,4)
);
CREATE TABLE dolarOtros (
fecha DATE,
precio NUMBER(8,4)
);
INSERT WHEN (precio < 13) THEN
INTO dolar13 VALUES (fecha, precio)
WHEN (precio >= 13 AND precio < 15) THEN
INTO dolar15 VALUES (fecha, precio)
ELSE INTO dolarOtros VALUES (fecha, precio)
SELECT * FROM dolar