sql >> Database teknologi >  >> RDS >> Oracle

Undtagelse for overtrædelse af begrænsninger ORA-00001

En unik begrænsning håndhæver, ja, unikhed. Det vil tillade nuller i modsætning til en primær nøglebegrænsning .

Din fejl betyder, at du indsætter duplikerede data, når databasen er konfigureret til eksplicit at forbyde det.

Du kan finde ud af, hvilke begrænsninger der er på en tabel ved at køre følgende forespørgsel på alle_begrænsninger . Linket afkoder kolonnen CONSTRAINT_TYPE , for eksempel P er en primær nøgle og U en unik nøgle.

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

For at finde ud af, hvilke kolonner der er i en begrænsning, brug >all_cons_columns i stedet, eller ved at kombinere de to til én forespørgsel:

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'

Til begge forespørgsler kan du tilføje den ekstra betingelse and constraint_name = 'IDX_CO_DETAILS' for at finde ud af detaljer om den specifikke begrænsning, der ser ud til at forårsage dit problem.

Din kommentar er lidt overraskende af et par grunde. Selv en systemskabt begrænsning, for eksempel en, der blev defineret in-line, da tabellen blev oprettet uden at et navn er angivet, skulle dukke op. Også begrænsningsnavnet IDX... betyder, at det er et indeks.

HVIS du kører følgende forespørgsel, skulle den fortælle dig, om objektet findes i databasen:

select *
  from all_objects
 where object_name = 'IDX_CO_DETAILS'

Jeg ville forvente, at OBJECT_TYPE returneret af denne forespørgsel er 'INDEX' .

Efterfølgende vil følgende forespørgsel returnere hvert indeks med det navn, indekstypen, den tabel det er knyttet til og ejeren af ​​den tabel.

select *
  from all_indexes
 where index_name = 'IDX_CO_DETAILS'

At dømme efter din fejl vil jeg yderligere forvente, at kolonnen UNIQUNESS returneret af denne forespørgsel er 'UNIQUE' .

Dette skulle hjælpe dig med at spore objektet.

Du kan også bruge systempakken dbms_metadata at spore objektets DDL; pas på det giver en klods tilbage.

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

parameteren schema er valgfrit.




  1. Import af CSV-data til Rails-appen ved at bruge noget andet end foreningens id

  2. Forskellen mellem $http.get og metode:'GET'

  3. php/mysql-kontoaktivering

  4. MySQL FEJL 502:VÆLG * FRA tabel WHERE uid=1 ORDER BY id DESC LIMIT 0, 100; Sideinddeling virker ikke