Esta lección trata de enseñarle cómo utilizar la sentencia UPDATE para actualizar múltiples registros en base de datos.
UPDATE target source [CLIENT SPECIFIED mandt].
La sentencia UPDATE cambia el contenido de uno o más registros de la tabla de base de datos especificada en “target”. Las entradas del “source” determinan qué columnas de las filas se cambian y cómo se cambian.
La instrucción UPDATE establece los valores de los campos del sistema SY-SUBRC y SY-DBCNT.
- 0 cuando se especificó SET en la sentencia, se cambió al menos una fila. Cuando se especificó un área de trabajo en origen, se cambió la fila especificada. Cuando se especificó una tabla interna en el origen, se cambiaron todas las filas especificadas o la tabla interna es vacía.
- 2 cuando se especificó una estructura de tipo LOB (Large Object) y los componentes de identificador no LOB (los demás campos que no son objetos grandes) no se actualizaron en base de datos.
- 4 cuando se ha especificado SET o un área de trabajo en el origen, no se cambió ninguna fila. Cuando se especificó una tabla interna en el origen, no se cambiaron todas las filas especificadas. Esto se debe a que no se encontró ninguna fila adecuada o porque el cambio generaría una fila que produce entradas duplicadas en la clave principal o un índice secundario único en la tabla de la base de datos.
La instrucción UPDATE establece en la variable del sistema SY-DBCNT el número de filas modificadas. Si se produce un desbordamiento porque el número o filas es mayor que 2.147.483.647, SY-DBCNT se establece en -1. Si SY-SUBRC es 2, SY-DBCNT también se establece en el valor -1.
- Notas
- Los cambios se asignan a la base de datos por el siguiente COMMIT de base de datos.
- La instrucción UPDATE establece un bloqueo de base de datos hasta el siguiente COMMIT o ROLLBACK de la base de datos. Si se utiliza incorrectamente, esto puede producir bloqueo.
- El número de filas que se pueden modificar en las tablas de una base de datos dentro de una LUW de base de datos es limitado, ya que un sistema de base de datos sólo puede administrar una cantidad limitada de bloqueos y datos en el área del ROLLBACK.
- La sentencia UPDATE no se puede aplicar a la tabla del sistema TRDIR.
- CLIENT SPECIFIED
Si se utiliza la adición CLIENT SPECIFIED, se respeta el ID del mandante especificado en la fuente. Sin la adición CLIENT SPECIFIED, el entorno de ejecución ABAP no pasa el ID del mandante especificado en el origen al sistema de base de datos, sino que pasa el ID del mandante actual en su lugar.
- Aplicación práctica
En un programa ejecutable realizamos la actualización del campo URL de la tabla ZSCARRSA00001. Actualizamos todos los registros el sufijo “/home” al valor existente en la columna URL.
Resumiendo: obtenemos todos los registros, modificamos el valor de la columna URL y actualizamos la tabla.
- Implemenamos el código fuente.
- Ejecutamos el programa.
- Visualizamos los registros actualizados en la tabla de base de datos utilizando la transacción del diccionario de datos SE11.
- Artículos relacionados
ABAP Open SQL – Actualizar un registro en base de datos utilizando la sentencia UPDATE
ABAP Open SQL – Actualizar columnas en base de datos con la sentencia UPDATE y la adición SET
ABAP Open SQL – Actualizar columnas en base de datos con la las expresiones de la adición SET de la sentencia UPDATE