Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Oracle (ORA-02270):không có khóa chính hoặc duy nhất phù hợp cho lỗi danh sách cột này

Lỗi ORA-2270 là một lỗi logic đơn giản:nó xảy ra khi các cột chúng tôi liệt kê trong khóa ngoại không khớp với khóa chính hoặc ràng buộc duy nhất trên bảng mẹ. Những lý do phổ biến cho điều này là

  • cấp độ gốc thiếu hoàn toàn khóa CHÍNH hoặc ràng buộc DUY NHẤT
  • mệnh đề khóa ngoại tham chiếu đến cột sai trong bảng mẹ
  • ràng buộc của bảng mẹ là một khóa ghép và chúng tôi chưa tham chiếu đến tất cả các cột trong câu lệnh khóa ngoại.

Có vẻ như không phải trường hợp trong mã đã đăng của bạn. Nhưng đó là một con cá trích đỏ, vì mã của bạn không chạy như bạn đã đăng nó. Đánh giá từ các chỉnh sửa trước đó, tôi cho rằng bạn không đăng mã thực của mình mà là một số ví dụ đơn giản. Thật không may, trong quá trình đơn giản hóa, bạn đã loại bỏ bất cứ thứ gì gây ra lỗi 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> 

Câu lệnh đó không thành công vì USER là từ khóa dành riêng nên chúng tôi không thể đặt tên bảng USER. Hãy khắc phục điều đó:

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> 

Và lo! Không có lỗi ORA-2270.

Than ôi, chúng tôi không thể làm gì nhiều ở đây để giúp bạn thêm. Bạn có một lỗi trong mã của bạn. Bạn có thể đăng mã của mình ở đây và một trong số chúng tôi có thể phát hiện ra lỗi của bạn. Hoặc bạn có thể kiểm tra mã của riêng bạn và khám phá nó cho chính mình.

Lưu ý:phiên bản cũ hơn của mã đã định nghĩa HOB.USERID là VARCHAR2 (20). Vì USER.ID được định nghĩa là một NUMBER nên nỗ lực tạo khóa ngoại sẽ gặp phải lỗi khác:

ORA-02267:loại cột không tương thích với loại cột được tham chiếu

Một cách dễ dàng để tránh không khớp là sử dụng cú pháp khóa ngoại để mặc định kiểu dữ liệu của cột:

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. Ví dụ về hàm Pipelined của Oracle

  2. đây là lỗi ORA-12154:TNS:không thể giải quyết định danh kết nối được chỉ định?

  3. Cách thực thi PL SQL Block trong Oracle

  4. Tìm hiểu ký hiệu tiền tệ mà phiên của bạn sử dụng trong Oracle

  5. GWFG trong Oracle RAC