sql >> Database >  >> RDS >> Oracle

Beperking Overtreding Uitzondering ORA-00001

Een unieke beperking dwingt, nou ja, uniciteit. Het zal nulls toestaan, in tegenstelling tot een primaire sleutelbeperking .

Uw fout betekent dat u dubbele gegevens invoert terwijl de database is geconfigureerd om dat expliciet te verbieden.

U kunt erachter komen welke beperkingen gelden voor een tabel door de volgende query uit te voeren op all_constraints . De link decodeert de kolom CONSTRAINT_TYPE , bijvoorbeeld P is een primaire sleutel en U een unieke sleutel.

select *
  from all_constraints uc
 where uc.table_name = 'MY_TABLE'
   and owner = 'DBSCHEMA'

Gebruik alle_cons_kolommen in plaats daarvan, of het combineren van de twee in één zoekopdracht:

select uc.*, ucc.column_name, ucc.position
  from all_constraints uc
  join all_cons_columns ucc
    on uc.owner = ucc.owner
   and uc.table_name = ucc.table_name
   and uc.constraint_name = ucc.constraint_name
 where uc.table_name = 'MY_TABLE'
   and uc.owner = 'DBSCHEMA'

Aan beide zoekopdrachten kunt u de aanvullende voorwaarde en constraint_name ='IDX_CO_DETAILS' toevoegen om meer te weten te komen over de specifieke beperking die uw probleem lijkt te veroorzaken.

Uw opmerking is om een ​​aantal redenen een beetje verrassend. Zelfs een door het systeem gecreëerde beperking, bijvoorbeeld een die in-line werd gedefinieerd toen de tabel werd gemaakt zonder dat er een naam werd opgegeven, zou moeten verschijnen. Ook de beperkingsnaam IDX... impliceert dat het een index is.

ALS u de volgende query uitvoert, zou deze u moeten vertellen of het object in de database bestaat:

select *
  from all_objects
 where object_name = 'IDX_CO_DETAILS'

Ik zou verwachten dat de OBJECT_TYPE geretourneerd door deze zoekopdracht is 'INDEX' .

In het verlengde daarvan zal de volgende query elke index met die naam, het type index, de tabel waaraan deze is gekoppeld en de eigenaar van die tabel retourneren.

select *
  from all_indexes
 where index_name = 'IDX_CO_DETAILS'

Afgaande op uw fout zou ik verder verwachten dat de kolom UNIQUNESS geretourneerd door deze zoekopdracht is 'UNIEK' .

Dit zou u moeten helpen het object op te sporen.

U kunt ook het systeempakket dbms_metadata gebruiken om de DDL van het object op te sporen; pas op dat het een klomp teruggeeft.

select dbms_metadata.get_ddl('INDEX','IDX_CO_DETAILS', schema => 'DBSCHEMA') 
  from dual

de parameter schema is optioneel.




  1. De beste manier om records te tellen met willekeurige tijdsintervallen in Rails+Postgres

  2. Hoe Atan2() werkt in PostgreSQL

  3. PHP Fatale fout:oproep naar niet-gedefinieerde functie mysql_connect()

  4. Zweedse tekens opslaan in mysql-database