✒️ABAP Los archivos en el servidor y las sentencias TRANSFER, DELETE y CLOSE
ABAP Los archivos en el servidor y las sentencias TRANSFER, DELETE y CLOSE
TRANSFER: Escribe registros sobre un fichero en el servidor de aplicación.
Sintaxis:
TRANSFER <campo> TO <fichero> [ LENGTH <longitud> ].
Escribe el valor del campo <campo> en el fichero <fichero>. El modo de transferencia se especifica en la sentencia OPEN DATASET. Si el fichero no está abierto para escritura, el sistema intenta abrirlo en modo binario o con las opciones de la última sentencia OPEN DATASET para ese fichero, sin embargo, es recomendable abrir siempre el fichero con la sentencia OPEN DATASET. <fichero> puede ser un literal o un campo como en la sentencia OPEN DATASET. <campo> pude ser de un tipo elemental, o un string que no contenga tablas internas como componentes. Las tablas internas no se pueden escribir directamente sobre ficheros. Con la opción LENGHT se puede especificar la longitud de los datos que va a ser transferido. El sistema transfiere los primeros <longitud> bytes sobre el fichero. Si el campo <longitud> es más pequeño que el campo, se trunca. Si <longitud> es más grande que el campo, el campo se rellena con espacios en blanco.
DELETE: Para borrar líneas de una tabla interna contamos 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 estemos 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 se decrementa 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.
DELETE <TABLA> [ FROM <n1> ] [ TO <n2> ] [ WHERE <condición> ].
Sentencia utilizada para borrar registros de una tabla de la base de datos. Con esta sentencia se puede borrar una o varias líneas de una tabla. Sólo se pueden borrar líneas de una tabla a través de una vista si ésta sólo hace referencia a una única tabla.
Se debe indicar al menos una de las tres cláusulas.
- Si utilizamos la sentencia sin la cláusula WHERE, el sistema borrará todas las líneas de la tabla <tabla> cuyo índice esté comprendido entre <n1> y <n2>.
- Si no utilizamos la cláusula FROM, el sistema borrará desde la primera línea.
- Si no utilizamos la cláusula TO, el sistema borrará hasta la última línea.
- Con la cláusula WHERE el sistema sólo borrará aquellas líneas de la tabla <tabla> que cumplen la condición especificada en <condición>. En <condición> se puede utilizar cualquier expresión lógica. El primer operando debe ser un componente de la estructura de línea de la tabla interna. Si el sistema borra al menos una línea la variable SY-SUBRC valdrá 0, si no borra ninguna valdrá 4.
DELETE {<tabla> | (<campo>) } [ CLIENT SPECIFIED ] [ FROM <área> ].
- Con la cláusula FROM, la línea que se borra es la que coincide con la clave primara del área <área>. Sin la cláusula FROM, la línea que se borra es la que coincide con la clave primaria del área de trabajo de la tabla <tabla>
- El área de trabajo <área> debe tener al menos, la longitud de la clave primaria. Si se borra al menos una línea de la tabla la variable SY-SUBRC valdrá 0, si no se borra ninguna valdrá 4.
- Con la especificación dinámica de la tabla, la cláusula FROM es obligatoria.
DELETE FROM {<tabla> | (<campo>) } [ CLIENT SPECIFIED ] [ WHERE <condición> ].
- Esta variante nos permite borrar una o varias líneas de la tabla <tabla> en función de las especificaciones de la cláusula WHERE. Dicha cláusula tiene las mismas opciones que las vistas para la sentencia SELECT. Si no especificamos la cláusula WHERE, todas las líneas de la tabla se borran. <tabla> debe estar declarada con la sentencia TABLES.
- La variable del sistema SY-DBCNT contiene el número de líneas borrar. Si se borra al menos una línea de la tabla la variable SY-SUBRC valdrá 0, si no se borra ninguna valdrá 4.
Hay que vigilar mucho con la cláusula WHERE para no borrar toda la tabla o líneas que no deseamos borrar. La única forma de recuperar lo borrada es restaurar el backup de la base de datos.
DELETE {<tabla> | (<tabla>) } [ CLIENT SPECIFIED ] FROM TABLE <tabla-interna>.
Con esta variante se puede borrar línea de una tabla de diccionario, basándose las líneas de una tabla interna. <tabla> y (<tabla>) sirve para especificar el nombre de la tabla de forma estática o dinámica. Esta sentencia borra aquellas líneas de la tabla cuya clave primaria coincida con la definida en una línea de la tabla interna. La tabla interna debe tener la longitud de la clave primaria de la tabla. Si el sistema no puede borrar ninguna entrada de la tabla porque no coincide ninguna clave primaria, el sistema continúa con la siguiente línea de la tabla interna. Si todas las líneas de la tabla interna se procesan, SY-SUBRC vale 0, en caso contrario vale 4. SY-DBCNT nos indica el número de líneas borradas. Si la tabla interna está vacía, SY-SUBRC y SY-DBCNT valen 0.
CLOSE: Esta sentencia cierra un fichero del servidor de aplicación.
Sintaxis:
CLOSE DATASET <fichero>.
Cierra el fichero <fichero>. <fichero> puede ser un literal o un campo, de la misma forma que en la sentencia OPEN DATASET. La operación de cerrar un fichero es sólo necesaria si quieres borrar el contenido de éste durante otra operación de escritura.
Para evitar errores y hacer que los programas sean más fáciles de leer, se debe cerrar un fichero antes de volver a utilizar la sentencia OPEN DATASET. Utilizando la sentencia CLOSE el programa se divide en bloques lógicos, haciendo más fácil el mantenimiento.
 
 
 
Agradecimiento:
Ha agradecido este aporte: Francisco Ortega Aguilar
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