2016-12-10 22 views
0

ASSIGNMENTSテーブルにデータを挿入すると、HARDWAREとSOFTWAREの値を除いてすべて正常に動作します。これらの値は他のものとまったく同じ方法でコーディングされています。私はそれを得ていない。親キーが見つからないのはなぜですか?

これは動作します:

INSERT INTO ASSIGNMENTS (ASSIGNMENT_ID, PROJECT_ID, STAFF_ID, JOB_ID) 
VALUES ('A0005','B0002','ST002','J0002'); 

しかし、私は、ハードウェアまたはソフトウェアの値を含めるようにしようと、このように: SQLエラー:ORA-02291

INSERT INTO ASSIGNMENTS (ASSIGNMENT_ID, PROJECT_ID, STAFF_ID, JOB_ID, HARDWARE_ID) 
VALUES ('A0005','B0002','ST002','J0002','H0002'); 

私は次のエラーを取得します:整合性制約(JAS1224.SYS_C0028418)違反 - 親キーが見つかりません 02291 00000 - "整合性制約(%s。%s)違反 - 親キーが見つかりません" *原因:外部キー値に一致する主キー値がありません。 *処置:外部キーを削除するか、一致する主キーを追加してください。

ここ

すべてのコードであり、テーブルのすべてが(ハードウェアおよびソフトウェアテーブルはスタッフテーブルと全く同じフォーマットで符号化される)正しく装着されている:

CREATE TABLE PROJECT 
(PROJECT_ID CHAR(5) NOT NULL, 
PROJECT_NAME CHAR(20), 
PROJECT_TYPE CHAR(20), 
START_DATE DATE, 
END_DATE DATE, 
PRIMARY KEY (PROJECT_ID)); 

CREATE TABLE HARDWARE 
(HARDWARE_ID CHAR(5) NOT NULL, 
HARDWARE_NAME CHAR(20), 
PRIMARY KEY (HARDWARE_ID)); 

CREATE TABLE SOFTWARE 
(SOFTWARE_ID CHAR(5) NOT NULL, 
SOFTWARE_NAME CHAR(20), 
PRIMARY KEY (SOFTWARE_ID)); 

CREATE TABLE STAFF 
(STAFF_ID CHAR(5) NOT NULL, 
STAFF_NAME CHAR(20), 
PRIMARY KEY (STAFF_ID)); 

CREATE TABLE JOB 
(JOB_ID CHAR(5) NOT NULL, 
JOB_TYPE CHAR(20), 
JOB_GRADE CHAR(20), 
PRIMARY KEY (JOB_ID)); 

CREATE TABLE ASSIGNMENTS 
(ASSIGNMENT_ID CHAR(5) NOT NULL, 
PROJECT_ID CHAR(5), 
STAFF_ID CHAR(5), 
JOB_ID CHAR(5), 
HARDWARE_ID CHAR(5), 
SOFTWARE_ID CHAR(5), 
PRIMARY KEY (ASSIGNMENT_ID), 
FOREIGN KEY (PROJECT_ID) REFERENCES PROJECT(PROJECT_ID), 
FOREIGN KEY (STAFF_ID) REFERENCES STAFF(STAFF_ID), 
FOREIGN KEY (JOB_ID) REFERENCES JOB(JOB_ID), 
FOREIGN KEY (HARDWARE_ID) REFERENCES HARDWARE(HARDWARE_ID), 
FOREIGN KEY (SOFTWARE_ID) REFERENCES SOFTWARE(SOFTWARE_ID)); 
+0

実際に 'HARDWARE'テーブルに' HARDWARE_ID = 'H0002''という行がありますか?プライマリキーを参照するプライマリキーと外部キーの仕組みを理解していますか? – mathguy

+0

私はこの質問をしたところ、データがすでに挿入されていて、すべてがそこにあったと確信していましたが、私は間違いを犯しているに違いないと思います。すべてのコードが書かれて準備ができて私は私が思ったが、それを実行していない必要があります。 – JadstaSeven

+0

:-)そういう心配は皆に起こります。 – mathguy

答えて

0

エラーメッセージがあってもよいです最初は少しわかりにくいですが、それはかなり明確です。

2つのINSERTの唯一の違いは、HARDWARE_IDです。したがって'H0002'は有効ではありませんHARDWARE_IDHARDWAREテーブルにはありません。

+1

ありがとう!私が気付かなかった小さな間違いでした。私はそれをほぼ2時間修正しようとしていました。私はあなたの答えを見て、すべてのテーブルを落として、すべてのコードを貼り付けて、everythiungがそこにあることを確認してみようと思っていました。あなたが正しいです、私はハードウェアテーブルのデータについて正しくチェックしていない必要があります。迅速な答えをありがとう、これは私をたくさん助けてくれました:D – JadstaSeven

関連する問題