Cambio de datos en una tabla utilizando la sentencia UPDATE

Para actualizar datos en una tabla o vista, utilice la sentencia UPDATE.

Con la sentencia UPDATE, puede cambiar el valor de una o más columnas en cada fila que cumpla la condición de búsqueda de la cláusula WHERE. El resultado de la sentencia UPDATE es uno o más valores de columna cambiados en cero o más filas de una tabla (en función del número de filas que cumplan la condición de búsqueda especificada en la cláusula WHERE). La sentencia UPDATE tiene este aspecto:

   UPDATE table-name
     SET column-1 = value-1,
         column-2 = value-2, ...
     WHERE search-condition ...

Supongamos que un empleado se reubica. Para actualizar CORPDATA.EMPLOYEE para reflejar el movimiento, ejecute la sentencia siguiente:

   UPDATE CORPDATA.EMPLOYEE
     SET JOB = :PGM-CODE,
         PHONENO = :PGM-PHONE
     WHERE EMPNO = :PGM-SERIAL;

Utilice la cláusula SET para especificar un nuevo valor para cada columna que desee actualizar. La cláusula SET nombra las columnas que desea actualizar y proporciona los valores a los que desea que se cambien. Puede especificar los siguientes tipos de valores:

  • Un nombre de columna. Sustituya el valor actual de la columna por el contenido de otra columna de la misma fila.
  • Una constante. Sustituya el valor actual de la columna por el valor proporcionado en la cláusula SET.
  • Un valor nulo. Sustituya el valor actual de la columna por el valor nulo, utilizando la palabra clave NULL. La columna debe estar definida como capaz de contener un valor nulo cuando se creó la tabla, o se produce un error.
  • Una variable del lenguaje principal de . Sustituya el valor actual de la columna por el contenido de una variable del lenguaje principal.
  • Una variable global . Sustituya el valor actual de la columna por el contenido de una variable global.
  • Un registro especial de . Sustituya el valor actual de la columna por un valor de registro especial; por ejemplo, USER.
  • Una expresión . Sustituya el valor actual de la columna por el valor que resulta de una expresión.
  • Una selección completa escalar. Sustituya el valor actual de la columna por el valor que devuelve la subconsulta.
  • La palabra clave DEFAULT . Sustituya el valor actual de la columna por el valor predeterminado de la columna. La columna debe tener un valor por omisión definido para ella o permitir el valor NULL, o se produce un error.

La siguiente sentencia UPDATE utiliza muchos valores diferentes:

   UPDATE WORKTABLE
      SET COL1 = 'ASC',
          COL2 = NULL,
          COL3 = :FIELD3,
          COL4 = CURRENT TIME,
          COL5 = AMT - 6.00,
          COL6 = COL7
       WHERE EMPNO = :PGM-SERIAL;

Para identificar las filas que se van a actualizar, utilice la cláusula WHERE:

  • Para actualizar una sola fila, utilice una cláusula WHERE que seleccione sólo una fila.
  • Para actualizar varias filas, utilice una cláusula WHERE que seleccione sólo las filas que desea actualizar.

Puede omitir la cláusula WHERE. Si lo hace, SQL actualiza cada fila de la tabla o vista con los valores que proporcione.

Si el gestor de bases de datos encuentra un error al ejecutar la sentencia UPDATE, detiene la actualización y devuelve un SQLCODE negativo. Si especifica COMMIT (*ALL), COMMIT (*CS), COMMIT (*CHG) o COMMIT (*RR), no se cambia ninguna fila de la tabla (las filas ya cambiadas por esta sentencia, si las hay, se restauran a sus valores anteriores). Si se especifica COMMIT (*NONE), las filas que ya han cambiado no se restauran a los valores anteriores.

Si el gestor de bases de datos no puede encontrar ninguna fila que cumpla la condición de búsqueda, se devuelve un SQLCODE de +100.

Nota: La sentencia UPDATE puede haber actualizado más de una fila. El número de filas actualizadas se refleja en SQLERRD (3) de la SQLCA. Este valor también está disponible desde el elemento de diagnóstico ROW_COUNT en la sentencia GET DIAGNOSTICS.

La cláusula SET de una sentencia UPDATE puede utilizarse de muchas maneras para determinar los valores reales que deben establecerse en cada fila que se actualiza. El ejemplo siguiente lista cada columna con su valor correspondiente:

UPDATE EMPLOYEE
  SET WORKDEPT = 'D11',
      PHONENO = '7213',
      JOB = 'DESIGNER'
  WHERE EMPNO = '000270';

También puede escribir esta sentencia UPDATE especificando todas las columnas y, a continuación, todos los valores:

UPDATE EMPLOYEE
  SET (WORKDEPT, PHONENO, JOB)
      = ('D11', '7213', 'DESIGNER')
  WHERE EMPNO = '000270';