La sentencia INSERT inserta una o más filas en una tabla utilizando los
valores proporcionados.
Invocación
Esta sentencia puede utilizarse en un programa de aplicación utilizando las
funciones de CLI de DB2 o emitirse a través del CLP.
Sintaxis
>>-INSERT INTO--nombre-tabla--+--------------------------+------>
| .-,--------------. |
| V | |
'-(----nombre-columna-+--)-'
.-,-------------.
V |
>--+-VALUES--(----| expresión |-+--)-+-------------------------><
'-Sentencia SELECT----------------'
expresión:
.-Operator---------------------.
V |
|----+---+--+-literal-----------+-+-----------------------------|
+-+-+ +-registro-especial-+
'---' +-función-----------+
'-(expresión)-------'
operador:
|--+-/-+--------------------------------------------------------|
+-*-+
+-+-+
'---'
Descripción
- INTO nombre-tabla
- Designa la tabla de la operación de inserción. El nombre debe
especificar una tabla existente, pero no una tabla de catálogo.
- (nombre-columna,...)
- Especifica las columnas para las que se proporcionan valores de
inserción. Cada nombre de columna debe ser un nombre no calificado que
identifica una columna de la tabla. Una misma columna no puede estar
especificada más de una vez.
La omisión de la lista de columnas equivale a una especificación implícita
de una lista que designa, de izquierda a derecha, cada columna de la
tabla.
- VALUES
- Presenta una fila de valores para insertar.
El número de valores para cada fila debe ser igual al número de nombres de
la lista de columnas. El primer valor se inserta en la primera columna
de la lista, el segundo valor en la segunda columna y así
sucesivamente.
- expresión
- La expresión puede ser un literal, registro especial, función o expresión
compleja.
No se da soporte a las operaciones aritméticas sobre los tipos de datos
CHAR, VARCHAR, BLOB(n), DATE, TIME y TIMESTAMP.
- literal
- Un literal puede ser un valor de cualquier tipo de datos soportado como
INTEGER, SMALLINT, DECIMAL, CHAR(n), VARCHAR(n), BLOB(n), DATE, TIME o
TIMESTAMP.
- registro-especial
- Se pueden utilizar los registros especiales CURRENT DATE, CURRENT TIME y
CURRENT TIMESTAMP para generar la fecha, la hora y la indicación de hora
actuales.
- Sentencia SELECT
- Especifica un conjunto de columnas nuevas en el formato de la tabla
resultante de una sentencia SELECT. Pueden haber una, más de una o
ninguna. Si la tabla resultante está vacía, SQLCODE se establece en
+100 y SQLSTATE se establece en '02000'. El objeto base de la
sentencia SELECT no puede ser el objeto base de la sentencia INSERT.
Reglas
- Valores por omisión
- Se inserta un valor por omisión o nulo en las columnas que no aparecen en
la lista de columnas. Las columnas que no aceptan valores por omisión o
nulos se deben incluir en la lista de columnas.
- Longitud
- Si el valor para insertar en una columna es un número, la columna debe ser
una columna numérica que pueda representar la parte entera del número.
Si el valor para insertar en una columna es una cadena de caracteres, la
columna debe ser una columna de tipo carácter cuya longitud sea como mínimo la
longitud de la cadena.
- Asignación
- Los valores de inserción se asignan a las columnas de acuerdo con las
reglas de asignación descritas en el manual DB2 Universal Database
Consulta de SQL.
Ejemplos
Ejemplo 1: Inserción en la tabla EMPLOYEE de un empleado
cuyas especificaciones son las siguientes:
- Número de empleado (EMPNO): 002001
- Nombre (FIRSTNAME): John
- Apellido (LASTNAME): Harrison
- Número de departamento (DEPT): 600
- Número de teléfono (PHONENO): 4900
- Salario (SALARY): 50000
- Fecha de contrato (HIREDATE): 01/12/1989
INSERT INTO EMPLOYEE
VALUES ('002001', 'John', 'Harrison', '600', '4900', 50000, '01/12/1989')
Ejemplo 2: Inserción en la tabla EMPLOYEE de un nuevo
empleado cuyas especificaciones son las siguientes:
- Número de empleado (EMPNO): 003002
- Nombre (FIRSTNAME): Jim
- Apellido (LASTNAME): Gray
INSERT INTO EMPLOYEE (EMPNO, FIRSTNAME, LASTNAME)
VALUES ('003002', 'Jim', 'Gray')
Ejemplo 3: Creación de una tabla EMP_ACT_COUNT.
Cargar EMP_ACT_COUNT con las filas de la tabla EMP_ACT con número de empleado
(EMPNO) y número de proyectos comprometidos.
CREATE TABLE EMP_ACT_COUNT
( EMPNO CHAR(6) NOT NULL,
COUNT INTEGER)
INSERT INTO EMP_ACT_COUNT
SELECT EMPNO, COUNT(*)
FROM EMP_ACT
GROUP BY EMPNO
Restricciones:
- Los tipos de datos de columna de la sentencia SELECT deben ser idénticos a
las definiciones de columna de la tabla de destino (exceptuando la capacidad
para contener nulos).
- No están permitidas las cláusulas ORDER BY y LIMIT.
Consulta relacionada