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