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

Oracle (ORA-02270):brak pasującego klucza unikalnego lub podstawowego dla tego błędu listy kolumn

Błąd ORA-2270 jest prostym błędem logicznym:zdarza się, gdy kolumny wymienione w kluczu obcym nie pasują do klucza podstawowego lub ograniczenia unikalności w tabeli nadrzędnej. Typowe przyczyny tego to

  • rodzicowi brakuje w ogóle klucza PRIMARY lub UNIQUE
  • klauzula klucza obcego odwołuje się do niewłaściwej kolumny w tabeli nadrzędnej
  • Ograniczenie tabeli nadrzędnej jest kluczem złożonym i nie odwołujemy się do wszystkich kolumn w instrukcji klucza obcego.

Wydaje się, że nie jest tak w przypadku Twojego wysłanego kodu. Ale to jest czerwony śledź, ponieważ Twój kod nie działa tak jak to zamieściłeś. Sądząc po poprzednich edycjach, zakładam, że nie publikujesz swojego aktualnego kodu, ale jakiś uproszczony przykład. Niestety w procesie upraszczania usunąłeś wszystko, co powoduje błąd ORA-2270.

SQL> CREATE TABLE JOB
 (
   ID       NUMBER NOT NULL ,
   USERID   NUMBER,
   CONSTRAINT B_PK PRIMARY KEY ( ID ) ENABLE
 );  2    3    4    5    6  

Table created.

SQL> CREATE TABLE USER
 (
   ID       NUMBER NOT NULL ,
   CONSTRAINT U_PK PRIMARY KEY ( ID ) ENABLE
 );  2    3    4    5  
CREATE TABLE USER
             *
ERROR at line 1:
ORA-00903: invalid table name


SQL> 

Ta instrukcja nie powiodła się, ponieważ USER jest zastrzeżonym słowem kluczowym, więc nie możemy nazwać tabeli USER. Naprawmy to:

SQL> 1
  1* CREATE TABLE USER
SQL> a s
  1* CREATE TABLE USERs
SQL> l
  1  CREATE TABLE USERs
  2   (
  3     ID       NUMBER NOT NULL ,
  4     CONSTRAINT U_PK PRIMARY KEY ( ID ) ENABLE
  5*  )
SQL> r
  1  CREATE TABLE USERs
  2   (
  3     ID       NUMBER NOT NULL ,
  4     CONSTRAINT U_PK PRIMARY KEY ( ID ) ENABLE
  5*  )

Table created.

SQL> Alter Table JOB ADD CONSTRAINT FK_USERID FOREIGN KEY(USERID) REFERENCES USERS(ID);   

Table altered.

SQL> 

I oto! Brak błędu ORA-2270.

Niestety, niewiele możemy tutaj zrobić, aby jeszcze bardziej Ci pomóc. Masz błąd w swoim kodzie. Tutaj możesz zamieścić swój kod, a jeden z nas dostrzeże Twój błąd. Możesz też sprawdzić swój własny kod i odkryć go dla siebie.

Uwaga:wcześniejsza wersja kodu zdefiniowała HOB.USERID jako VARCHAR2(20). Ponieważ USER.ID jest zdefiniowany jako NUMBER, próba utworzenia klucza obcego spowodowałaby inny błąd:

ORA-02267:typ kolumny niezgodny z typem kolumny odniesienia

Prostym sposobem na uniknięcie niezgodności jest użycie składni klucza obcego do domyślnego typu danych kolumny:

CREATE TABLE USERs
 (
   ID    number NOT NULL ,
   CONSTRAINT U_PK PRIMARY KEY ( ID ) ENABLE
 );

CREATE TABLE JOB
 (
   ID       NUMBER NOT NULL ,
   USERID   constraint FK_USERID references users,
   CONSTRAINT B_PK PRIMARY KEY ( ID ) ENABLE
 );


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-12170:TNS:Przekroczono limit czasu połączenia

  2. Rejestrowanie zapytań Oracle SQL

  3. EF 4, jak dodać częściowe klasy

  4. Dodaj parametr daty do zapytania Oracle

  5. CRS 11.2.0