これらすべてを実行すると、この時点の前にいくつかのエラーが発生しますが、ここではスキップします...この FK に対する最初のエラーは次のようです。
INSERT INTO parts_order VALUES
(2
,2
,95115995
,'Delivered'
,'04/dec/2012'
,'01/jan/2013'
,'20/dec/2012'
,'Handler Pro'
);
挿入句に列を配置して、どの行が表示されているかを確認できるようにすることをお勧めします(つまりINSERT INTO parts_order (order_id, job_id, vendor_id, ...) VALUES (4, 4, 95115995, ...)
、また、あなた(および私たち)がテーブル定義を参照し直す必要がなく、定義が変更された場合の失敗を回避するため)また、暗黙の日付変換 (つまり、to_char('05/jan/2013', 'DD/mon/YYYY')
.
とにかく...それが不平を言っている制約はVENDOR_ID_FK
であり、これはテーブル定義で確認できます:
CREATE TABLE parts_order
( order_id NUMBER(11)
CONSTRAINT order_id_pk PRIMARY KEY
,job_id NUMBER(11)
CONSTRAINT job_id_fk REFERENCES maintenance(job_id)
,vendor_id NUMBER(11)
CONSTRAINT vendor_id_fk REFERENCES parts_vendor(part_vendor_id)
,parts_status VARCHAR2(20)
,date_ordered DATE
,date_arrived DATE
,date_delivery_due DATE
,part_name VARCHAR2(20)
CONSTRAINT part_name_nn NOT NULL);
・・・反対parts_vendor(part_vendor_id)
です。エラーが言っているのは、vendor_id
挿入しようと95115995
している が親テーブルに存在しないということです。これは本当です。値、、およびparts_vendor
を持つレコードのみを挿入します。part_vendor_id
1
2
3
4
制約は意図したとおりに機能しています。「親」が存在せずに「子」レコードを配置するのを止めています。parts_vendor
ID のレコードを作成するか、挿入しようとしている値を既存のものに95115995
変更する必要があります。vendor_id
parts_order