La sentencia MODIFY se utiliza con tablas internas y con tablas de base de datos. Esta lección trata de enseñarle cómo utilizar la sentencia MODIFY con tablas de base de datos para modificar múltiples registros.
- Sintaxis
MODIFY target [CLIENT SPECIFIED] FROM TABLE itab.
La instrucción MODIFY inserta una o más filas especificadas en el origen en la tabla de base de datos especificada en el destino o sobrescribe las filas existentes.
La instrucción UPDATE establece los valores de los campos del sistema SY-SUBRC y SY-DBCNT.
- 0 cuando se declaró un área de trabajo en origen, se insertó o modificó la fila especificada. Cuando se especificó una tabla interna en el origen, se insertaron todas las líneas especificadas, se modificaron 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 modificaron en base de datos.
- 4 cuando se especificó un área de trabajo en el origen, no se procesaron filas o cuando se especificó una tabla interna en el origen, no todas las filas especificadas se procesaron porque ya hay una fila con el mismo índice secundario único en la tabla de base de datos.
La instrucción MODIFY 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.
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.
… dbtab|(dbtab_syntax) [CLIENT SPECIFIED]
Las entradas del “target” determinan, de forma estática o dinámica, la tabla de la base de datos o la vista a la que se accede y el control del manejo del mandante.
Sólo se pueden especificar las vistas que hacen referencia a una tabla de base de datos única y cuyo estado en el diccionario ABAP permite cambios.
En lugar de la especificación estática, se puede especificar un objeto de datos entre paréntesis dbtab_syntax, que debe contener el nombre de la tabla de base de datos o la vista cuando se ejecuta la sentencia. Para el objeto de datos dbtab_syntax se puede especificar un objeto de datos de tipo carácter o una tabla estándar sin claves de tabla secundaria. La sintaxis en dbtab_syntax no es, como en ABAP Editor, sensible a mayúsculas y minúsculas.
Si se especifica una tabla interna, el sistema procesa todas las filas de la tabla interna. El tipo de fila de la tabla interna debe cumplir los requisitos previos para su uso en sentencias de Open SQL.
Si el cambio a una fila en la tabla interna lleva a una entrada doble en un índice secundario único, la fila correspondiente no se inserta y la variable del sistema SY-SUBRC se establece en 4. Si la tabla interna está vacía, no se procesan filas y SY-SUBRC se establece en 0. El campo del sistema SY-DBCNT siempre se establece en el número de filas que se procesaron realmente.
- Aplicación práctica
En la lógica del código fuente de un programa ejecutable realizamos una lectura en la tabla de base de datos ZSCARRSA00001 obteniendo todos los registros en una tabla interna. Modificamos el valor de la columna URL para todos los registros cambiando el valor http por el valor https. Aparte, en la misma tabla interna añadimos el siguiente registro:
Airline Code | Airline name | Local currency of airline | Airline URL |
IB | Iberia Airlines | EUR | https://www.iberia.com |
Utilizando una única sentencia actualizamos la tabla de base de datos ZSCARRSA00001 con los registros de la tabla interna.
- Implementamos el código fuente.
- Ejecutamos el programa.
- Visualizamos los registros modificados en la base de datos utilizando la transacción del diccionario de datos SE11.
- Conclusión
La misma sentencia MODIFY actualizó el valor de la columna URL para los registros que existían en la tabla e insertó un nuevo registro. Como su definición dice, la instrucción MODIFY inserta una o más filas especificadas en el origen en la tabla de base de datos especificada en el destino o sobrescribe las filas existentes.
Le aconsejamos utilizar con mucho cuidado la sentencia MODIFY ya que puede insertar registros no deseados.
¿Que diferencia existe entre MODIFY itab y MODIFY TABLE itab?
Saludos