✒️ABAP Las sentencias INSERT, UPDATE, MODIFY y DELETE
ABAP Las sentencias INSERT, UPDATE, MODIFY y DELETE
INSERT
Se utiliza para insertar líneas en una tabla interna antes de una posición determinada.
Sintaxis: INSERT [ <área-trabajo> INTO | INITIAL LINE INTO ] [ INDEX <índice> ].
Con <área-trabajo> INTO se especifica el área de trabajo que se va a insertar. Si se omite esta opción, el área de trabajo que se va a insertar será la asociada con la tabla interna. El significado de las cláusulas es el siguiente:
- INITIAL LINE TO -> inserta una línea con los valores iniciales de cada campo.
- INDEX -> Inserta una línea antes de la posición indicada en <índice> y la nueva tiene el índice <índice>.
Si la tabla tiene <índice> -1 entradas, la línea se insertara en la última posición. Si la tabla tiene menos de <índice> -1 posiciones, la línea no se insertara.
Si se produce algún error al insertar la línea, la variable SY-SUBRC valdrá 4, en caso contrario valdrá 0. Si la sentencia se utiliza sin la cláusula INDEX, sólo se podrá utilizar en un LOOP .. ENDLOOP. El sistema insertara la línea antes de la línea tratada en el bucle.
La sentencia INSERT puede ser utilizada para insertar una o varias líneas (a partir de una tabla interna) en una tabla de la base de datos. Si no sabemos si la clave primaria existe, se debe utilizar la sentencia MODIFY. Se puede utilizar una vista como especificación de tabla, siempre y cuando la vista haga referencia a una sola tabla.
UPDATE
Sentencia utilizada para modificar registros de una tabla de la base de datos.
Sintaxis: UPDATE { | () } [ CLIENT SPECIFIED ] [ FROM <área> ].
Con esta variante de la sentencia UPDATE semodifica una sola línea de la tabla especificada. El significado de la cláusula FROM es la siguiente:
- FROM -> El área de trabajo <área> sobrescribe la línea de la tabla que tenga la misma clave primaria. La tabla debe estar declarada con la sentencias TABLES. Si no se especifica la cláusula FROM, será el contenido del área de trabajo de la propia tabla el que sobrescriba la línea de la tabla con la misma clave primaria. El área de trabajo <área> debe tener la misma longitud que el área de trabajo de la tabla. Para asegurarse de que el área de trabajo <área> tiene la misma estructura que el área de trabajo de la tabla, se suele declarar con la sentencia DATA (o TYPE) una estructura utilizando la cláusula LIKE.
Si la operación concluye satisfactoriamente, SY-SUBRC vale 0 y SY-DBCNT vale 1, en caso contrario SY-SUBRC vale 4 y SY-DBCNT vale 0. Se puede especificar el nombre de la tabla en tiempo de ejecución como veíamos en sentencias anteriores con la opción (). Con esta opción, la cláusula FROM es obligatoria y <área> no puede ser la propia área de trabajo de la tabla.
MODIFY
Se utiliza para sustituir líneas de una tabla interna.
Sintaxis: MODIFY [ FROM <área-trabajo> ] [ INDEX <índice> ].
El área de trabajo <área-trabajo> sustituye a la línea de la tabla interna.
- En el caso de tablas internas con líneas de cabecera, la cláusula FROM es opcional.
- Si se utiliza la cláusula INDEX, la línea que hay que reemplazar será la existente con el índice <índice>. Si el sistema puede realizar la modificación, la variable del sistema SY-SUBRC es 0. Si la tabla interna tiene menos líneas que las indicadas en <índice>, la modificación no se realiza y SY-SUBRC vale 4. Si no se utiliza la cláusula INDEX, la sentencia solo puede ser procesada en un bucle LOOP .. ENDLOOP. En este caso la línea que se modificara será la que se este tratando.
MODIFY { | () }[ CLIENT SPECIFIED ] [ FROM <área> ].
Sentencia utilizada para modificar o insertar registros de una tabla de la base de datos. Con esta sentencia se tienen dos posibilidades. Si la tabla de base de datos no tiene ninguna línea con la misma clave primera se inserta. En caso contrario se modifica. Por cuestiones de rendimiento se debe limitar su uso al máximo. Con <tabla> se especifica el nombre de la tabla de forma estática. Para especificar la tabla de forma dinámica se utiliza la opción (<tabla>).
- Con la especificación dinámica, la cláusula FROM es obligatoria.
MODIFY { | () }[ CLIENT SPECIFIED ] [ FROM TABLE <área> ].
Esta sentencia modifica o inserta el contenido de área de trabajo <área> sobre la tabla de la base de datos. Las líneas de la tabla interna modifican las líneas de la tabla de la base de datos si la clave primera existe. Para el resto de entradas de la tabla interna, se añaden a la tabla. SY-SUBRC es siempre 0. SY-DBCNT toma el valor del número de entradas de la tabla interna.
Cuando se añaden entradas, la sentencia funciona como la sentencia INSERT y cuando se modifican entradas, las sentencias funciona como la sentencia MODIFY.
DELETE
Para borrar líneas de una tabla interna se cuenta con la sentencia DELETE. Varios formatos de la sentencia nos permiten borrar líneas de una forma diferente.
Sintaxis: DELETE <tabla>.
El sistema sólo puede procesar esta sentencia dentro de un bucle LOOP .. ENDLOOP. La sentencia DELETE borra la línea que se este tratando en el bucle.
DELETE <tabla> INDEX <índice>.
- Con la cláusula INDEX, el sistema borra la línea con el índice <índice> en la tabla interna <tabla>. Después de borrar la línea, el índice de la siguiente línea es decrementado en 1. Si la operación es completada, la variable SY-SUBRC vale 0. Si la línea con el índice <índice> no existe, SY-SUBRC vale 4.
DELETE ADJACENT DUPLICATE ENTRIES FROM <tabla> [ COMPARING <c> ].
Esta sentencia borra todas las entradas duplicada adyacentes de una tabla interna. Dos líneas se consideran duplicadas si cumplen uno de los siguientes criterios de comparación:
- Sin la cláusula COMPARING, el contenido de los campos claves estándar deben ser iguales.
- Con la cláusula COMPARING con el formato siguiente: COMPARING <c1> <c2>.... El contenido de los campos (c1, c2 ....) debe ser igual. También se puede especificar el nombre de los campos que hay que comparar en tiempo de ejecución utilizando la siguiente sintaxis: (<campo>). La variable <campo> contiene el nombre de la variable que se va a comparar. Si en el momento de procesar la sentencia DELETE, <campo> está vacío, el sistema la ignora. Si contiene el nombre inválido, se produce un error en tiempo de ejecución.
- Con la cláusula COMPARING con el siguiente formato: COMPARING ALL FIELDS, el contenido de todos los campos debe ser igual.
Si el sistema borra al menos una línea de la tabla la variable SY-SUBRC valdrá 0 si no borra ninguna línea, SY-SUBRC valdrá 4. Es recomendable que la tabla interna este ordenada antes de ejecutar esta sentencia
Actualización y recuperación de una base de datos
A veces es necesario asegurarse que los cambios en la base de datos se han realizado, antes de continuar con el proceso. Por el contrario, a veces es necesario deshacer algunos cambios realizados en la base de datos. Para confirmar los cambios realizados sobre la base de datos se utiliza la sentencia COMMIT WORK.
Sintaxis: COMMIT WORK [ AND WAIT ].
Para deshacer los cambios realizados en la base de datos se utiliza la sentencia ROLLBACK WORK. Estas sentencias tienen un papel importante en la programación de transacciones de diálogo. Con la cláusula AND WAIT, el programa se para hasta que la tarea de actualización termina. Si la actualización es satisfactoria, SY-SUBRC vale 0, en caso contrario, SY-SUBRC toma un valor distinto de 0.
 
 
 
Sobre el autor
Publicación académica de Sergio Armando Beltran Castaneda, en su ámbito de estudios para la Carrera Consultor ABAP.
Sergio Armando Beltran Castaneda
Profesión: Ingeniero de Sistemas con Especialización en Gerencia de Proyectos - Colombia - Legajo: WK55K
✒️Autor de: 70 Publicaciones Académicas
🎓Cursando Actualmente: Consultor ABAP Nivel Avanzado
🎓Egresado del módulo:
Disponibilidad Laboral: FullTime
Presentación:
Soy ingeniero de sistemas desde hace mas de 10 años y quiero enfocarme en el mundo sap, iniciando en el lenguaje abap, con miras a ampliar mi conocimiento profesional y laboral.
Certificación Académica de Sergio Beltran