Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Oracle (ORA-02270):tidak ada kunci unik atau kunci utama yang cocok untuk kesalahan daftar kolom ini

Kesalahan ORA-2270 adalah kesalahan logis langsung:itu terjadi ketika kolom yang kami daftarkan di kunci asing tidak cocok dengan kunci utama atau batasan unik pada tabel induk. Alasan umum untuk ini adalah

  • induk tidak memiliki KUNCI UTAMA atau batasan UNIK sama sekali
  • klausa kunci asing merujuk ke kolom yang salah di tabel induk
  • batasan tabel induk adalah kunci majemuk dan kami belum mereferensikan semua kolom dalam pernyataan kunci asing.

Tampaknya tidak ada masalah dalam kode yang Anda posting. Tapi itu masalah, karena kode Anda tidak berjalan seperti yang telah Anda posting. Dilihat dari suntingan sebelumnya, saya kira Anda tidak memposting kode Anda yang sebenarnya tetapi beberapa contoh yang disederhanakan. Sayangnya dalam proses penyederhanaan Anda telah menghapus apa pun yang menyebabkan kesalahan 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> 

Pernyataan itu gagal karena USER adalah kata kunci yang dicadangkan sehingga kami tidak dapat memberi nama tabel USER. Mari kita perbaiki:

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> 

Dan lihat! Tidak ada kesalahan ORA-2270.

Sayangnya, tidak banyak yang bisa kami lakukan di sini untuk membantu Anda lebih jauh. Anda memiliki bug dalam kode Anda. Anda dapat memposting kode Anda di sini dan salah satu dari kami dapat menemukan kesalahan Anda. Atau Anda dapat memeriksa kode Anda sendiri dan menemukannya sendiri.

Catatan:versi kode sebelumnya mendefinisikan HOB.USERID sebagai VARCHAR2(20). Karena USER.ID didefinisikan sebagai NOMOR, upaya untuk membuat kunci asing akan menghasilkan kesalahan yang berbeda:

ORA-02267:tipe kolom tidak sesuai dengan tipe kolom yang direferensikan

Cara mudah untuk menghindari ketidakcocokan adalah dengan menggunakan sintaks kunci asing ke default tipe data kolom:

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. Cara Mencadangkan RAC VM

  2. Oracle:DDL dan pengembalian transaksi

  3. SELECT SUM mengembalikan baris ketika tidak ada catatan

  4. LISTAGG() Fungsi di Oracle

  5. PL/SQL ORA-01422:pengambilan yang tepat mengembalikan lebih dari jumlah baris yang diminta