Blog dedicado a la programación y a la informática en general

Ir al contenido | Ir al menú | Ir a las búsquedas

Depurar INSERT SELECT o MERGE en Oracle

oracle-logo.png

Si te encuentras con errores a la hora de insertar registros en una tabla a través de una instrucción MERGE o al realizar un INSERT SELECT quizás te interese en saber cómo depurar estos errores.

Oracle nos proporciona las herramientas para realizar un registro de los errores que pudiéramos tener al usar este tipo de instrucciones.

Para ello necesitamos crear una tabla de log donde registrar esos errores, esta tabla de log se puede crear mediante la siguiente instrucción:

CALL DBMS_ERRLOG.CREATE_ERROR_LOG (
    'TABLA', -- Tabla en la que vamos a insertar registros mediante MERGE o INSERT SELECT
    'TABLA_ERRORES', -- Tabla que vamos a crear para registrar los errores
    'OWNER' -- Esquema
);

Al ejecutar la instrucción anterior se creará la tabla que tendrá una serie de campos para almacenar el tipo de error producido y luego otro conjunto de campos que coincidirá con la tabla en la que intentamos insertar datos.

Si en nuestra tabla tenemos un campo ID que es Primary Key y por lo tanto será único, al ejecutar la siguiente consulta nos dará un error y quedará grabado en la tabla de log.

INSERT INTO TABLA_PRUEBAS (ID, NOMBRE)
    SELECT ROWNUM, V.NOMBRE FROM DATOS V
        LOG ERRORS INTO TABLA_ERRORES;

O en su forma MERGE:

MERGE INTO TABLA_PRUEBAS T
    USING ( SELECT * FROM DATOS ) V ON (T.ID = V.ID) 
    WHEN NOT MATCHED THEN
        INSERT (ID, NOMBRE) VALUES (1, V.NOMBRE)
            LOG ERRORS INTO TABLA_ERRORES;

En cualquier caso, si consultamos los datos de la tabla TABLA_ERRORES veremos el error producido y además el registro exacto que ha dado conflicto de la tabla donde queremos hacer la inserción.

Añadir un comentario

El código HTML se muestra como texto y las direcciones web se transforman automáticamente.

Discusiones sobre el mismo tema

URL de retroenlace : https://www.dosmweb.com/blog/index.php?trackback/26

Fuente de los comentarios de esta entrada