Necesito ejecutar una consulta de Oracle que violaría restricciones únicas, solo en los registros que no violarían las restricciones. En MySQL creo que esto se puede hacer usando el comando ignore. ¿Hay un equivalente en Oracle?equivalente de Oracle de la actualización de MySQL ignore
Respuesta
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:
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.
- 1. Oracle Equivalente a MySQL INSERT IGNORE?
- 2. MySQL equivalente de SEQUENCE.NEXTVAL de Oracle
- 3. Equivalente al RowID de Oracle en MySQL
- 4. MySQL equivalente de la función DECODE en Oracle
- 5. Equivalente de Oracle del tipo de texto de MySQL
- 6. Equivalente a \ G de MySQL en SQL * Plus de Oracle
- 7. ¿Tiene mysql el equivalente de las "funciones analíticas" de Oracle?
- 8. ¿Hay MySQL equivalente al TIMESTAMP de Oracle CON HUSO HORARIO?
- 9. Actualización de tabla múltiple en Oracle
- 10. Pregunta de actualización de Oracle con seleccionar
- 11. En la declaración de actualización de Oracle SQL, ¿la actualización de filas ocurre al mismo tiempo?
- 12. Optimización de ACTUALIZACIÓN de MySql?
- 13. Hibernate con MySQL: Auto-Generate Id: Equivalente de secuencia (Oracle) en MySQL
- 14. ¿Hay algún equivalente para paquetes (Oracle) en MySQL?
- 15. mysql función para proporcionar equivalente a Oracle NVL
- 16. MySQL disparador 'actualización de la columna' sintaxis
- 17. ACTUALIZACIÓN de MySQL usando la condición IF
- 18. ¿Existe una función equivalente a la función de Oracle NVL en Mysql?
- 19. Actualización de MySQL primaria clave
- 20. MySQL Error de actualización 1093
- 21. Oracle 'printf' equivalente
- 22. Migrar de Oracle a MySQL
- 23. Python MySQL instrucción de actualización
- 24. Actualización de múltiples valores Mysql
- 25. Oracle equivalente a DISTINCT ON de Postgres?
- 26. actualización con join statement mysql?
- 27. Conectar Por Equivalente Antes de MySQL
- 28. LOAD DATA INFILE equivalente en Oracle
- 29. MySQL MSSQL equivalente de CONVERT()
- 30. fecha de actualización + un año de MySQL