Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle (ORA-02270) :няма съвпадащ уникален или първичен ключ за тази грешка в списъка с колони

Грешката ORA-2270 е проста логическа грешка:случва се, когато колоните, които изброяваме във външния ключ, не съвпадат с първичен ключ или уникално ограничение на родителската таблица. Честите причини за това са

  • на родителя липсва ограничение PRIMARY KEY или UNIQUE
  • клаузата за външен ключ препраща към грешната колона в родителската таблица
  • Ограничението на родителската таблица е съставен ключ и не сме посочили всички колони в израза за външен ключ.

Изглежда, че не е така във вашия публикуван код. Но това е червена херинга, защото вашият код не се изпълнява както сте го публикували. Съдейки от предишните редакции, предполагам, че не публикувате действителния си код, а някакъв опростен пример. За съжаление в процеса на опростяване сте премахнали всичко, което причинява грешката 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> 

Това изявление се провали, защото USER е запазена ключова дума, така че не можем да именуваме таблица USER. Нека поправим това:

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> 

И ето! Няма грешка ORA-2270.

Уви, тук не можем да направим много, за да ви помогнем допълнително. Имате грешка в кода си. Можете да публикувате кода си тук и някой от нас може да открие грешката ви. Или можете да проверите собствения си код и да го откриете сами.

Забележка:по-ранна версия на кода дефинира HOB.USERID като VARCHAR2(20). Тъй като USER.ID е дефиниран като NUMBER, опитът за създаване на външен ключ би довел до друга грешка:

ORA-02267:тип колона несъвместим с рефериран тип колона

Лесен начин да избегнете несъответствия е да използвате синтаксиса на външния ключ за подразбиране на типа данни на колоната:

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. Вземане на запис с максимална дата

  2. DB Control наближава смъртта си

  3. SQLException:Не е намерен подходящ драйвер за jdbc:oracle:thin:@//localhost:1521/orcl

  4. Как да получа Oracle SCHEMA като DDL скриптове с DBMS_METADATA (и SCHEMA_EXPORT)

  5. Кеш на резултатите