残念ながら(DDLコードについて)@ William Robertsonに同意する必要があります。モデルを変更する必要があるため、DDLコードを完全に作り直す必要があります。この理由は次のとおりです。
元のDDLコードからリバースエンジニアリングされたモデルを見ると、REQUISITIONには3つ(申し訳ありませんが、4つ)の親テーブルがあることがわかります。そのため、外部キー違反が原因で、挿入が常に失敗します。モデル:
DDLコードの形式で問題を説明する単純化された例は、次のようになります。
create table parent1 ( id number primary key ) ; -- analogy: supplies_pharmaceutical
create table parent2 ( id number primary key ) ; -- analogy: supplies_nonsurgical
create table parent3 ( id number primary key ) ; -- analogy: supplies_surgical
create table child ( -- analogy: requisitions
id number primary key
, parentid number
);
alter table child add constraint fkey_parent1
foreign key ( parentid ) references parent1 ( id ) ;
alter table child add constraint fkey_parent2
foreign key ( parentid ) references parent2 ( id ) ;
alter table child add constraint fkey_parent3
foreign key ( parentid ) references parent3 ( id ) ;
begin
insert into parent1 ( id ) values ( 1 ) ;
insert into parent2 ( id ) values ( 2 ) ;
insert into parent3 ( id ) values ( 3 ) ;
end ;
/
したがって、親テーブルにデータが入力されているので、簡単に確認してください:
select 'parent1 (id) -> ' || id from parent1
union all
select 'parent2 (id) -> ' || id from parent2
union all
select 'parent3 (id) -> ' || id from parent3
;
-- result
'PARENT1(ID)->'||ID
parent1 (id) -> 1
parent2 (id) -> 2
parent3 (id) -> 3
すべて良い。次に、子テーブルにいくつかの行を挿入します。
insert into child ( id, parentid ) values ( 100, 1 ) ;
-- ORA-02291: integrity constraint (...FKEY_PARENT3) violated - parent key not found
insert into child ( id, parentid ) values ( 101, 2 ) ;
-- ORA-02291: integrity constraint (...FKEY_PARENT3) violated - parent key not found
insert into child ( id, parentid ) values ( 102, 3 ) ;
-- ORA-02291: integrity constraint (...FKEY_PARENT2) violated - parent key not found
正しい親テーブルは「自動的に選択される」だけではないことがわかります。
ウィリアムのモデルOTOHでは、REQUISITIONには「サプライ」に関して1つの親(テーブル)しかありません。これにより、行の挿入がはるかに簡単になります...以下を参照してください。