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.
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:
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.
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.
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
- En la lógica de un programa ejecutable realizamos una selección de datos en la tabla estándar SCARR obteniendo en una tabla interna todas las compañías aéreas. Insertamos los datos obtenidos en una tabla Z utilizando la sentencia INSERT con la adición ACCEPTING DUPLICATE KEYS. La tabla Z contiene ya registros de los que se insertarán desde la tabla interna.
- Implementamos el código fuente.
- Ejecutamos el programa. Como se puede visualizar no tenemos excepciones por clave duplicada, ya que el gestor de base de datos inserta sólo los registros que no existen en la tabla Z.
- Visualizamos los registros insertados en la base de datos utilizando la transacción del diccionario de datos SE11. 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.
- Artículos relacionados:
ABAP Open SQL – Insertar un registro en base de datos utilizando la sentencia INSERT
ABAP Open SQL – Insertar múltiples registros en base de datos utilizando la sentencia INSERT
ABAP Open SQL – Insertar registros con tratamiento de excepciones