2012-01-17 17 views
5

Recibo un error que no puedo encontrarle sentido. El error es bastante sencillo:Infracción de restricción única de Oracle que hace referencia a una restricción que no parece existir

ORA-00001: unique constraint (*schema*.*xyz_constraint*) violated 

Sin embargo, lo que está causando mi confusión es el hecho de que aparentemente no existe tal restricción. Ciertamente no está definido sobre la mesa; el DB en cuestión casi no tiene integridad referencial definida, y la tabla particular en la que estoy insertando datos no tiene una clave definida.

Por lo que vale la pena, no puedo encontrar la restricción en cualquier parte de la base de datos:

select * 
    from all_constraints 
    where constraint_name like '%xyz_constraint%' 

¿Hay algo que estoy pasando por alto? Gracias.

+6

Cuando se realiza un intento de tal manera que un único índice ** ** tendría un duplicado, Oracle reportarán como única restricción ** ** violación. Así que sugeriría buscar índices únicos además de restricciones. –

Respuesta

4

Esto ocurre cuando la restricción pertenece a otro usuario y no tiene permisos para ello.

Trate de buscar una vez más por el momento desde la perspectiva SYS

+0

Tendré que contratar a uno de los DBA. Naturalmente, no tengo acceso SYS al esquema. Será interesante ver qué pasa, ya que esto ha estado en proceso por más de dos años sin un problema de restricción. Hoy recibí 600 errores. Gracias por la respuesta; Te dejaré saber lo que encuentro. – Ickster

+0

@Ickster: No recuerdo las causas, pero tenía exactamente el mismo comportamiento y fue lo que dije ;-) De todos modos, buena suerte en su investigación y esperando detalles de lo que realmente era en su caso – zerkms

+2

Solo pregunta 'DBA_CONSTRAINTS' en su lugar. Si tiene acceso a esta vista, entonces si la restricción existe, estará allí. 'SYS' no es necesariamente obligatorio,' SYSTEM' también tendría acceso a él. –

1

Los nombres de los objetos de esquema casi siempre se almacenan en mayúsculas. Pruebe

select * 
from all_constraints 
where constraint_name like '%XYZ_CONSTRAINT%' 

ORA-00001 generalmente ocurre para claves primarias duplicadas. ¿Estás seguro de que no tienes uno en la mesa?

+0

La consulta real que ejecuté contenía el nombre de la restricción exactamente como se devolvió en el error que recibí. Estoy seguro de que no hay una clave definida en la mesa. Las únicas restricciones son declaraciones NOT NULL en varios campos. – Ickster

Cuestiones relacionadas