Eliminar registros utilizando filtros

La sentencia DELETE se utiliza con tablas internas y con tablas de base de datos. Esta lección trata de enseñarle cómo utilizar la sentencia DELETE para eliminar registros de las tablas de base de datos utilizando filtros. Con esta opción no se necesita pasar en el target un área de trabajo o una tabla interna.

  • Sintaxis

DELETE { {FROM target [WHERE sql_cond]}
| {target FROM source} }.

  • Efecto

La instrucción DELETE elimina una o más filas de la tabla de base de datos especificada en target. Las filas que se van a eliminar se declaran en una condición WHERE sql_cond o con objetos de datos en origen.

  • Comportamiento de las variables del sistema

La instrucción DELETE establece los valores de los campos del sistema      SY-SUBRC y SY-DBCNT.
0 cuando se declaró la condición WHERE, se eliminó al menos una fila. Cuando se declaró un área de trabajo en el origen, se eliminó la fila declarada. En la declaración de una tabla interna en origen, todas las filas declaradas se eliminaron o la tabla interna está vacía. Si no se declararon las condiciones, se eliminaron todas las filas.
4 cuando se declaró una condición WHERE o un área de trabajo en el origen, no se eliminaron filas. Cuando se declaró una tabla interna en el origen, no se eliminaron todas las filas especificadas. Si no se especificaron condiciones, no se eliminaron filas, ya que la tabla de la base de datos ya estaba vacía.
La instrucción DELETE 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
  • Las filas se eliminan permanentemente de la tabla de base de datos en el siguiente COMMIT de base de datos. Hasta ese momento, todavía se pueden deshacer usando la sentencia ROLLBACK.
  • La instrucción DELETE establece un bloqueo de base de datos hasta el siguiente COMMIT o ROLLBACK. Si se utiliza incorrectamente, puede producir un deadlock.
  • El número de filas que se pueden eliminar de 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.
  • 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.

  • DELETE dbtab – target

… 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.

  • WHERE sql_cond

La adición WHERE utiliza una expresión lógica sql_cond para especificar qué filas se eliminarán de la tabla de la base de datos. Las mismas reglas se aplican a la expresión lógica sql_cond como a la condición WHERE de la sentencia SELECT, con la excepción de que las subconsultas no se pueden evaluar en la tabla de base de datos que se va a cambiar. Si no hay ninguna fila en la base de datos que cumple con la condición WHERE, no se elimina ningún registro y la variable del sistema SY-SUBRC se establece en 4. Si no se especifica una condición WHERE, se eliminan todas las filas.

  • Aplicación práctica

En un programa ejecutable implementamos la sentencia que elimina de la tabla de base de datos ZSCARRSA00001 los registros con el valor AC – Air Canada y JL – Japan Airlines en el campo clave CARRID.

  1. Implementamos el código fuente.
  2. Ejecutamos el programa.
  3. En la transacción del diccionario de datos SE11 podemos comprobar que los registros se han eliminado de la tabla de base de datos.

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *