Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Wyjątek dotyczący naruszenia ograniczeń ORA-00001

unikalne ograniczenie wymusza, no cóż, wyjątkowość. Zezwala na wartości null, w przeciwieństwie do ograniczenia klucza podstawowego .

Twój błąd oznacza, że ​​wstawiasz zduplikowane dane, gdy baza danych została skonfigurowana tak, aby wyraźnie tego zabronić.

Możesz dowiedzieć się, jakie ograniczenia znajdują się w tabeli, uruchamiając następujące zapytanie na wszystkie_ograniczenia . Link dekoduje kolumnę CONSTRAINT_TYPE , na przykład P jest kluczem podstawowym, a U unikalny klucz.

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

Aby dowiedzieć się, jakie kolumny są objęte ograniczeniem, użyj all_cons_columns zamiast tego lub łącząc je w jedno zapytanie:

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'

Do obu zapytań możesz dodać dodatkowy warunek and constraint_name = 'IDX_CO_DETAILS' aby poznać szczegóły konkretnego ograniczenia, które wydaje się być przyczyną Twojego problemu.

Twój komentarz jest nieco zaskakujący z kilku powodów. Powinno pojawić się nawet ograniczenie utworzone przez system, na przykład takie, które zostało zdefiniowane w linii podczas tworzenia tabeli bez określenia nazwy. Ponadto nazwa ograniczenia IDX... oznacza, że ​​jest to indeks.

JEŚLI uruchomisz następujące zapytanie, powinno ono powiedzieć, czy obiekt istnieje w bazie danych:

select *
  from all_objects
 where object_name = 'IDX_CO_DETAILS'

Spodziewam się, że OBJECT_TYPE zwrócone przez to zapytanie to 'INDEX' .

Następnie następujące zapytanie zwróci każdy indeks o tej nazwie, typ indeksu, tabelę, z którą jest powiązany i właściciela tej tabeli.

select *
  from all_indexes
 where index_name = 'IDX_CO_DETAILS'

Sądząc po twoim błędzie, spodziewałbym się dalej, że kolumna UNIQUNESS zwrócone przez to zapytanie to 'UNIQUE' .

Powinno to pomóc w wyśledzeniu obiektu.

Możesz także użyć pakietu systemowego dbms_metadata wyśledzić DDL obiektu; uważaj, że zwraca kloba.

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

parametr schema jest opcjonalne.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak włączyć tryb dziennika archiwizacji w Oracle Database 19c?

  2. Porównaj wiersze i kolumny tej samej tabeli

  3. Zapytanie za pomocą instrukcji w kolumnie VARCHAR2

  4. Jak dodać atrybut do xml zawartego w CLOB w bazie danych Oracle?

  5. Oracle PL/SQL Release 12.2.0.1.0 vs 12.1.0.2.0 - wykonanie natychmiastowe z parametrami