Inserción de filas utilizando la sentencia INSERT

Una forma de insertar datos en tablas es utilizar la sentencia SQL INSERT. Este método es útil para insertar pequeñas cantidades de datos o insertar datos de otra tabla o vista.

Procedimiento

Para añadir nuevas filas a una tabla o vista:

Emitir una declaración INSERT utilizando uno de los siguientes métodos:
  • Especifique los valores de columna para insertar una sola fila. Puede especificar constantes, variables de host, expresiones, DEFAULT o NULL utilizando la cláusula VALUES.
  • En un programa de aplicación, especifique matrices de valores de columna para insertar varias filas en una tabla. Utilice matrices de variables de host en la cláusula VALUES de la instrucción INSERT FOR n ROWS para añadir varias filas de valores de columna a una tabla.
  • Incluya una sentencia SELECT en la sentencia INSERT para indicar a Db2 que otra tabla o vista contiene los datos para la nueva fila o filas.

En cada caso, por cada fila que inserte, debe proporcionar un valor para cualquier columna que no tenga un valor predeterminado. Para una columna que cumpla una de las siguientes condiciones, especifique DEFAULT para indicar a Db2 que inserte el valor predeterminado para esa columna:

  • La columna es anulable.
  • La columna se define con un valor predeterminado.
  • La columna tiene el tipo de datos ROWID. Las columnas ROWID siempre tienen valores predeterminados.
  • La columna es una columna de identidad. Las columnas de identidad siempre tienen valores predeterminados.
  • La columna es una columna de marca de tiempo de cambio de fila.

Los valores que puede insertar en una columna ROWID, una columna de identidad o una columna de cambio de marca de tiempo de fila dependen de si la columna está definida con GENERATED ALWAYS o GENERATED BY DEFAULT.

Puede utilizar la cláusula VALUES de la instrucción INSERT para insertar una sola fila de valores de columna en una tabla. Puede nombrar todas las columnas para las que está proporcionando valores u omitir la lista de nombres de columnas. Si omite la lista de nombres de columna, debe especificar valores para todas las columnas.

Recomendación : Para las sentencias INSERT estáticas, nombre todas las columnas para las que está proporcionando valores por las siguientes razones:
  • Su declaración INSERT es independiente del formato de la tabla. (Por ejemplo, no es necesario cambiar el extracto cuando se añade una columna a la tabla)
  • Puede verificar que está especificando los valores en orden.
  • Sus declaraciones de origen son más autoexplicativas.

Si no nombra las columnas en una instrucción INSERT estática y se añade una columna a la tabla, puede producirse un error si se vuelve a ejecutar la instrucción INSERT. Se producirá un error después de cualquier reasignación de la instrucción INSERT a menos que cambie la instrucción INSERT para incluir un valor para la nueva columna. Esto es así incluso si la nueva columna tiene un valor predeterminado.

Cuando enumere los nombres de las columnas, debe especificar sus valores correspondientes en el mismo orden que en la lista de nombres de columnas.

Ejemplo INSERT statements

  • La siguiente sentencia inserta información sobre un nuevo departamento en la tabla YDEPT.

    INSERT INTO YDEPT (DEPTNO, DEPTNAME, MGRNO, ADMRDEPT, LOCATION)
      VALUES ('E31', 'DOCUMENTATION', '000010', 'E01', ' ');

    Después de insertar una nueva fila de departamento en su tabla YDEPT, puede utilizar una instrucción SELECT para ver lo que ha cargado en la tabla. La siguiente instrucción SQL muestra todas las nuevas filas de departamento que ha insertado:

    SELECT *
      FROM YDEPT
      WHERE DEPTNO LIKE 'E%'
      ORDER BY DEPTNO;

    La tabla de resultados tiene un aspecto similar al siguiente:

    DEPTNO  DEPTNAME                              MGRNO   ADMRDEPT  LOCATION
    ======  ====================================  ======  ========  ===========
    E01     SUPPORT SERVICES                      000050  A00       -----------
    E11     OPERATIONS                            000090  E01       -----------
    E21     SOFTWARE SUPPORT                      000100  E01       -----------
    E31     DOCUMENTATION                         000010  E01       -----------
  • La siguiente declaración inserta información sobre un nuevo empleado en la tabla YEMP. Debido a que la columna WORKDEPT es una clave externa, el valor que se inserta para esa columna ( E31 ) debe ser un valor en la columna de clave primaria, que es DEPTNO en la tabla YDEPT.

    INSERT INTO YEMP
      VALUES ('000400', 'RUTHERFORD', 'B', 'HAYES', 'E31', '5678', '1998-01-01',
              'MANAGER', 16, 'M', '1970-07-10', 24000, 500, 1900);
  • La siguiente declaración también inserta una fila en la tabla YEMP. Debido a que las columnas no especificadas permiten valores nulos, Db2 inserta valores nulos en las columnas que no especifique.

    INSERT INTO YEMP
      (EMPNO, FIRSTNME, MIDINIT, LASTNAME, WORKDEPT, PHONENO, JOB)
      VALUES ('000410', 'MILLARD', 'K', 'FILLMORE', 'D11', '4888', 'MANAGER');