2.1. INSERT

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

Tabla: Departamento
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.

Por ejemplo:

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 .

Por ejemplo:

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);

Insertar mediante un SELECT

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;

Inserción por selección Sentencia WHEN

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