source

Oracle(ORA-02270): 이 열 목록 오류에 대해 일치하는 고유 또는 기본 키가 없습니다.

factcode 2023. 7. 3. 23:21
반응형

Oracle(ORA-02270): 이 열 목록 오류에 대해 일치하는 고유 또는 기본 키가 없습니다.

테이블이 두 개야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
 );

이제외키제조추가다니합건을약부▁key에 외래 키 조건을 .JOB에 대한 참조.USER as 블이, 로

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-02270SO 관련 질문

ORA-2270 오류는 간단한 논리적 오류입니다. 외부 키에 나열된 열이 기본 키 또는 상위 테이블의 고유 제약 조건과 일치하지 않을 때 발생합니다.일반적인 이유는 다음과 같습니다.

  • 부모에 기본 키 또는 고유 제약 조건이 모두 없습니다.
  • 외부 키 절이 상위 테이블에서 잘못된 열을 참조합니다.
  • 상위 테이블의 제약 조건이 복합 키이므로 외부 키 문에 있는 모든 열을 참조하지 않았습니다.

게시된 코드에서는 둘 다 그렇지 않은 것 같습니다.하지만 그것은 당신이 게시한 것처럼 당신의 코드가 실행되지 않기 때문에 위험한 것입니다.이전 편집 내용으로 미루어 볼 때 당신은 실제 코드를 게시하는 것이 아니라 단순화된 예시를 게시하고 있는 것 같습니다.안타깝게도 단순화 과정에서 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> 

그리고 lo! ORA-2270 오류 없음.

아아, 우리가 여기서 당신을 더 도울 수 있는 것은 많지 않습니다.코드에 버그가 있습니다.여기에 코드를 게시하면 우리 중 한 명이 실수를 발견할 수 있습니다.또는 자신의 코드를 확인하고 직접 찾을 수 있습니다.


참고: 이전 버전의 코드는 HOB.USERID를 VARCHAR2(20)로 정의했습니다.USER.ID는 숫자로 정의되므로 외부 키를 생성하려고 하면 다음과 같은 다른 오류가 발생합니다.

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
 );

작업 테이블(Varchar2(20))의 데이터 유형이 USER 테이블(NUMBER NOT NULL)의 데이터 유형과 일치하지 않습니다.

저의 경우에는 PK가 비활성화되어 문제가 발생했습니다.

활성화하려면 다음을 수행합니다.

  1. 다음과 같은 제약 조건 이름을 찾습니다.

    SELECT * FROM USER_CONS_COLUMNS WHERE TABLE_NAME = 'referenced_table_name';

  2. 그런 다음 다음 다음 명령을 사용하여 제약 조건 이름을 사용하도록 설정했습니다.

    ALTER TABLE table_name ENABLE CONSTRAINT constraint_name;

새 테이블을 만들기 위한 스크립트는 다음과 같습니다.

CREATE TABLE new_table
(
id                     NUMBER(32) PRIMARY KEY,
referenced_table_id    NUMBER(32)    NOT NULL,
CONSTRAINT fk_new_table_referenced_table_id
    FOREIGN KEY (referenced_table_id)
        REFERENCES referenced_table (id)
);

실행 중에 다음 오류가 발생했습니다.

[42000][2270] ORA-02270: 이 열 목록에 일치하는 고유 또는 기본 키가 없습니다.

이 문제는 우리의 경우 참조된 테이블의 기본 키가 비활성화되었기 때문입니다.다음 SQL을 사용하여 활성화해야 합니다.

ALTER TABLE referenced_table ENABLE PRIMARY KEY USING INDEX;

그 후 우리는 문제없이 첫 번째 스크립트를 사용하여 새로운 테이블을 만들었습니다.

계획이 맞습니다, 사용자.ID는 User, Job의 기본 키여야 합니다.ID는 Job 및 Job의 기본 키여야 합니다.사용자 ID는 사용자의 외부 키여야 합니다.ID. 또한 명령어가 구문적으로 정확한 것 같습니다.

그럼 뭐가 잘못됐을까요?당신은 적어도 직업을 가지고 있다고 생각합니다.사용자에 쌍이 없는 사용자 ID입니다.ID. 예를 들어 User의 모든 값인 경우.ID는 1, 2, 3, 4, 6, 7, 8이며 Job 값을 가지고 있습니다.사용자 ID가 5인 경우(사용자 ID의 가능한 값인 1,2,3,4,6,7,8이 아님) 외부 키 제약 조건을 만들 수 없습니다.솔루션:

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

존재하지 않는 사용자가 있는 모든 작업을 삭제합니다.보관 데이터가 들어 있는 이 테이블의 복사본으로 마이그레이션할 수 있습니다.

대부분 기본 키가 누락된 경우 상위 테이블에서 정의되지 않습니다.그런 다음 발생합니다.

기본 키 추가와 같이 부모에서 다음과 같이 정의합니다.

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

이것이 효과가 있기를 바랍니다.

시나리오에서 다음과 같은 문제에 직면했습니다.

저는 먼저 교과서 표를 만들었습니다.

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이라는 관계를 만들고자 했을 때 다음과 같은 질문에 직면했습니다.

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 게시물 덕분에:

에 대한 인 이유는 일적인이다같습다니과음는입니다.
이 전혀 .
상위 테이블의 제약 조건이 복합 키이므로 외부 키 문에 있는 모든 열을 참조하지 않았습니다.
참조된 PK 제약 조건이 있지만 사용할 수 없습니다.

이 명령을 실행할 때:

ALTER TABLE MYTABLENAME MODIFY CONSTRAINT MYCONSTRAINTNAME_FK ENABLE;

다음 오류가 발생했습니다.

ORA-02270: no matching unique or primary key for this column-list
02270. 00000 -  "no matching unique or primary key for this column-list"
*Cause:    A REFERENCES clause in a CREATE/ALTER TABLE statement
          gives a column-list for which there is no matching unique or primary
          key constraint in the referenced table.
*Action:   Find the correct column names using the ALL_CONS_COLUMNS

참조된 테이블에 일치하는 유형의 기본 키 제약 조건이 있습니다.이 오류의 근본 원인은 기본 키 제약 조건이 비활성화되었기 때문입니다.

당신의 USERID 선언의 차이가 문제가 아닌가요?

JOB: UserID is Varchar
USER: UserID is Number?

기본 키가 상위 테이블에 아직 정의되지 않은 경우 이 문제가 발생할 수 있습니다.기존 테이블에서 기본 키를 정의해 보십시오.예:

ALTER TABLE table_name
ADD PRIMARY KEY (the_column_which_is_primary_key);
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));

언급URL : https://stackoverflow.com/questions/10802212/oracle-ora-02270-no-matching-unique-or-primary-key-for-this-column-list-erro

반응형