Вопрос по database – Oracle (ORA-02270): отсутствует соответствующий уникальный или первичный ключ для этой ошибки списка столбцов

15

У меня есть две таблицы,Table JOB а такжеTable USERвот структура

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

 CREATE TABLE USER
 (
   ID       NUMBER NOT NULL ,
   CONSTRAINT U_PK PRIMARY KEY ( ID ) ENABLE
 );

Теперь я хочу добавить ограничение внешнего ключаJOB ссылаясь наUSER стол, как

Alter Table JOB ADD CONSTRAINT FK_USERID FOREIGN KEY(USERID) REFERENCES USER(ID);

это броскиOracle (ORA-02270) : no matching unique or primary key for this column-list errorпроводя некоторое исследование, кажется, что нам нужноunique key or primary key ограничение наUSERID но я не могу иметь это как единое целоеUSERID может иметь несколькоJOBS С ним связаны какие-либо мысли или предложения о том, как решить эту проблему?

ИсследовалORA-02270 а такжеТАК связанный вопрос

причина этой ошибки - столбец ID таблицы User не является уникальным или первичным ключом danny
Предложение: удалите эти таблицы, а затем повторно запустите DDL. Я предлагаю сначала создать USER, а затем JOB. Дайте нам знать, если это работает. Вы также можете попытаться ввести "USER" в двойных кавычках, как отмечено в комментарии @ LSU.Net к первому ответу (ниже). Bob Jarvis
@APC: Во-первых, я не собираюсь тратить время на сообщества, я ценю усилия, прилагаемые сообществом. Кроме того, я не знаю, где возникла ошибка и, следовательно, возникают проблемы. Rachel

Ваш Ответ

9   ответов
1

В моем сценарии я столкнулся с той же проблемой:

Я создал таблицу учебника сначала с

create table textbook(txtbk_isbn varchar2(13)
primary key,txtbk_title varchar2(40),
txtbk_author varchar2(40) );

Затем таблица глав:

create table chapter(txtbk_isbn varchar2(13),chapter_title varchar2(40), constraint pk_chapter primary key(txtbk_isbn,chapter_title), constraint chapter_txtbook foreign key (txtbk_isbn) references textbook (txtbk_isbn));

Тогда тема таблицы:

create table topic(topic_id varchar2(20) primary key,topic_name varchar2(40));

Теперь, когда я хотел создать взаимосвязь с именем chapter_topic между chapter (имеющим составной первичный ключ) и topic (имеющим первичный ключ из одного столбца), я столкнулся с проблемой следующего запроса:

create table chapter_topic(txtbk_isbn varchar2(13),chapter_title varchar2(40),topic_id varchar2(20), primary key (txtbk_isbn, chapter_title, topic_id), foreign key (txtbk_isbn) references textbook(txtbk_isbn), foreign key (chapter_title) references chapter(chapter_title), foreign key (topic_id) references topic (topic_id));

Решение состояло в том, чтобы сослаться на составной внешний ключ, как показано ниже:

create table chapter_topic(txtbk_isbn varchar2(13),chapter_title varchar2(40),topic_id varchar2(20), primary key (txtbk_isbn, chapter_title, topic_id), foreign key (txtbk_isbn, chapter_title) references chapter(txtbk_isbn, chapter_title), foreign key (topic_id) references topic (topic_id));

Благодаря сообщению APC, в котором он упомянул в своем сообщении заявление, что:

Common reasons for this are
- the parent lacks a constraint altogether
- the parent table's constraint is a compound key and we haven't referenced all the columns in the foreign key statement.
- the referenced PK constraint exists but is DISABLED

2

Скорее всего, когда у вас отсутствует первичный ключ не определен из родительской таблицы. Затем это происходит.

Как добавить первичный ключ определить в родительском как показано ниже:

ALTER TABLE "FE_PRODUCT" ADD CONSTRAINT "FE_PRODUCT_PK" PRIMARY KEY ("ID") ENABLE;

Надеюсь, это сработает.

0

Если первичный ключ еще не определен в родительской таблице, эта проблема может возникнуть. Пожалуйста, попробуйте определить первичный ключ в существующей таблице. Например:

ALTER TABLE table_name
ADD PRIMARY KEY (the_column_which_is_primary_key);
0

Нет разницы между вашей декларацией USERID и проблемой?

JOB: UserID is Varchar
USER: UserID is Number?
я исправил ошибку, и идентификатор пользователя, и идентификатор являются числами Rachel
2

В моем случае проблема была вызвана отключенным ПК.

Чтобы включить его:

  1. I look for the Constraint name with:

    SELECT * FROM USER_CONS_COLUMNS WHERE TABLE_NAME = 'referenced_table_name';

  2. Then I took the Constraint name in order to enable it with the following command:

    ALTER TABLE table_name ENABLE CONSTRAINT constraint_name;

29

Ошибка ORA-2270 довольно проста: это происходит, когда столбцы, на которые мы ссылаемся во внешнем ключе, не соответствуют первичному ключу или уникальному ограничению родительской таблицы. Общие причины этого

  • the parent lacks a constraint altogether
  • the parent table's constraint is a compound key and we haven't referenced all the columns in the foreign key statement.

Ни один из них, похоже, не относится к вашему опубликованному коду. Но это красная сельдь, потому что твой кодdoes not run как вы опубликовали это. Судя по предыдущим изменениям, я полагаю, что вы публикуете не реальный код, а упрощенный пример. К сожалению, в процессе упрощения вы устранили все, что вызывает ошибку 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.

Таким образом, мы мало что можем сделать, чтобы помочь вам в дальнейшем. У вас есть ошибка в вашем коде. Вы можете разместить свой код здесь, и один из нас может определить вашу ошибку. Или вы можете проверить свой собственный код и открыть его для себя.

& quot; ... очевидно, вы этого не поняли. Ошибка довольно проста: & quot; Мы (все мы) делаем все возможное, чтобы найти лучшие, более качественные способы общения, чем этот.
2

Схема правильная, User.ID должен быть первичным ключом пользователя, Job.ID должен быть первичным ключом Job, а Job.UserID должен быть внешним ключом для User.ID. Кроме того, ваши команды выглядят синтаксически правильными.

Так что может быть не так? Я считаю, что у вас есть по крайней мере Job.UserID, у которого нет пары в User.ID. Например, если все значения User.ID равны: 1,2,3,4,6,7,8, а значение Job.UserID равно 5 (что не входит в число 1,2,3,4,6) , 7,8 (которые являются возможными значениями UserID), вы не сможете создать ограничение внешнего ключа. Решение:

delete from Job where UserID in (select distinct User.ID from User);

удалит все работы с несуществующими пользователями. Возможно, вы захотите перенести их в копию этой таблицы, которая будет содержать архивные данные.

-3
create table articles(code varchar2(30)constraint articles_pk primary key,titre varchar2(30),
support varchar2(30) constraint support_fk references supports(support),type_support varchar2(30),
numeroDePage varchar2(30),datepublication date,categorie varchar2(30)constraint categorie_fk references organismes(categorie),
tendance varchar2(30)constraint tendance_fk references apreciations(tendance));
8

Тип данных в таблице заданий (Varchar2 (20)) не соответствует типу данных в таблице USER (NUMBER NOT NULL).

В любом случае имена констант должны были возникнуть и иметь ошибку
+1 Хорошо заметили.
У вас есть другая проблема, Рэйчел, я создал две таблицы вместе с ограничением FK, и он отлично работает. Обратите внимание, что «ПОЛЬЗОВАТЕЛЬ» необходимо экранировать кавычки, и ваши первичные ключи также имеют идентичные имена ограничений, что является недопустимым DDL.
Этот DDL выполняется без проблем в Oracle 11g:codeСОЗДАТЬ ТАБЛИЦУ ЗАДАНИЯ (НОМЕР ИДЕНТИФИКАТОРА НЕ НУЛЬ, НОМЕР ПОЛЬЗОВАТЕЛЯ, ВКЛЮЧИТЬ ПЕРВИЧНЫЙ КЛЮЧ B_PK (ИД)) СОЗДАТЬ ТАБЛИЦУ «ПОЛЬЗОВАТЕЛЬ» (ID NUMBER NOT NULL, CONSTRAINT U_PK PRIMARY KEY (ID) ВКЛЮЧЕНО); Изменить таблицу JOB ADD CONSTRAINT FK_USERID FOREIGN KEY (USERID) ССЫЛКИ & quot; ПОЛЬЗОВАТЕЛЬ & quot; (ID);
Я должен был упомянуть об этом заранее, и идентификатор, и идентификатор пользователя являются типом номера. Rachel

Похожие вопросы