2011-09-15 17 views

Respuesta

8

Puede utilizar la función de registro de errores de Oracle para esto:

primer lugar usted necesita para crear una tabla que posteriormente contendrá las filas ignorados:

EXECUTE DBMS_ERRLOG.CREATE_ERROR_LOG('YOUR_TABLE', 'YOUR_TABLE_ERROR_LOG'); 

que crea una tabla llamada YOUR_TABLE_ERROR_LOG de la tabla denominada YOUR_TABLE (obviamente, solo necesitas hacer eso una vez).

Cuando se ejecuta la actualización, necesita añadir la cláusula LOG ERRORS:

UPDATE your_table 
    SET ... 
WHERE ... 
LOG ERRORS INTO YOUR_TABLE_ERROR_LOG ('UPDATE running at '||to_char(sysdate, 'yyyy-MM-dd HH24:MI:SS')) 
REJECT LIMIT UNLIMITED; 

La cadena que se especifica es un valor arbitrario que permite identificar la acción que generó los errores.

Después de la actualización, puede consultar la tabla YOUR_TABLE_ERROR_LOG para ver qué errores se produjeron y por qué. Si no está interesado en los errores, simplemente trunque la tabla de registro de errores después.

Para más detalles ver el manual:
http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/statements_10008.htm#BCEFBFCD

Editar 2014-10-27

Desde Oracle 11.2 hay una nueva pista llamada CHANGE_DUPKEY_ERROR_INDEX que se puede utilizar para este fin. Sin embargo, nunca lo intenté.

detalles en el manual: http://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements006.htm#CHDIFFJE

Para INSERT operaciones hay un indicio similares llamado IGNORE_ROW_ON_DUPKEY_INDEX:
http://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements006.htm#CHDEGDDG

Algunos ejemplos:

0

Es definitivamente difícil decir que no (Oracle es grande) pero en 15 años de programación de base de datos nunca he visto una característica como esta en Oracle. Puede desactivar restricciones, pero eso no es lo mismo que intenta lograr aquí.

Una solución alternativa sería escribir algunos PL/SQL que procesen la tabla que está actualizando fila por fila, intente realizar la actualización y se trague cualquier error. Eso no va a ser eficiente, pero funcionará. Pero en todos los escenarios que pueda imaginar (a menos que tenga una tabla muy, muy compleja) debería poder escribir su consulta de actualización para incluir subconsultas apropiadas que funcionen alrededor de las restricciones. La estrategia exacta dependería de las tablas y de la consulta.

Cuestiones relacionadas