Insertar registros con tratamiento de excepciones

La sentencia INSERT se utiliza para insertar registros en tablas internas y en tablas de base de datos. Esta lección trata de enseñarle cómo manejar las posibles excepciones que levanta la base de datos en cuanto se utiliza la sentencia INSERT para insertar múltiples registros con la misma clave.

  • Sintaxis

El lenguaje ABAP Open SQL ofrece dos formas para utilizar la misma sentencia.
INSERT { {INTO target VALUES wa }
| {   target FROM   wa| {TABLE itab} } }.
Con la opción de insertar múltiples registros desde una tabla interna se puede utilizar la adición ACCEPTING DUPLICATE KEYS.
… TABLE itab [ACCEPTING DUPLICATE KEYS] …
Si un registro con la misma clave primaria o el mismo índice secundario único existe en la tabla de base de datos para uno o más registros de los que se van a insertar, estos registros no se pueden insertar. En esta situación, existen tres posibilidades:

  1. Utilizar ACCEPTING DUPLICATE KEYS

Si se especifica la adición ACCEPTING DUPLICATE KEYS, se insertan todos los registros por lo cual es posible. Los registros restantes se descartan y el sistema se establece en 4. El campo del sistema SY-DBCNT se establece en el número de filas que se insertan.

  1. Manejo de una excepción

Si la adición ACCEPTING DUPLICATE KEYS no se especifica, se genera la excepción manejable de tipo CX_SY_OPEN_SQL_DB. Las filas siguen siendo insertadas hasta que se genera la excepción. El programador tiene la posibilidad de capturar la excepción. El número de filas insertadas no está definido. Los campos del sistema SY-SUBRC y SY-DBCNT conservan su valor anterior.

  1. Errores de tiempo de ejecución

Si la adición ACCEPTING DUPLICATE KEYS no se especifica y si no se captura la excepción, se produce un error de tiempo de ejecución. Esto ejecuta un ROLLBACK de base de datos que vuelve a copiar todos los cambios a la base de datos actual.

  • Aplicación práctica- Tratamiento de excepciones
  1. En un programa ejecutable, en la lógica del código fuente realizamos una selección de datos en la tabla estándar SCARR obteniendo en una tabla interna todas las compañías aéreas que no utilizan la moneda USD. Insertamos los datos obtenidos en una tabla de base de datos Z, que es una copia exacta de la tabla estándar, capturando el posible levantamiento de excepción por registros con clave duplicada. La tabla Z ya contiene registros con el código de moneda EUR.
  2. Implementamos el código declarando tablas internas y una referencia de la clase estándar de excepción CX_ROOT, clase padre de todas las excepciones. Utilizamos esta referencia para capturar la excepción que levanta el gestor de base de datos.
  3. Ejecutamos el programa. La base de datos levanta una excepción por los registros con la clave de moneda EUR que ya existen en base de datos, pero insertará los demás ya que se captura la excepción. El método GET_TEXT devuelve el texto de la excepción que se muestra en la salida por la sentencia WRITE.01 40
  4. Visualizamos los registros insertados en la base de datos utilizando la transacción del diccionario de datos SE11.02 37
  • Artículos relacionados

Insertar un registro
Insertar múltiples registros
Insertar registros sin tratamiento de excepciones

Deja una respuesta

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