ablog

不器用で落着きのない技術者のメモ

ORA-02270: no matching unique or primary key for this column-list

現象

外部キーを作成しようとすると、ORA-02270 が発生する。

SQL> alter session set current_schema = "scott";
SQL> alter table foo add constraint foo_bar_fk1 foreign key (bar) references bar (id) on delete set null enable;

error at line 1:
ora-02270: no matching unique or primary key for this column-list

解決策

  • 外部キーの値が親表の値と一致しているか確認し、一致していなければ一致させる。
SQL> select a.bar, b.id, count(1)
	from foo a
		left outer join bar b
			on a.bar = b.id
	group by a.bar, b.id
	order by a.bar, b.id;

確認したところ、全て一致していた。

  • 親表にプライマリー・キーもしくはユニーク・キーが存在するか確認し、なければ作成する。
SQL> alter table bar add constraint bar_pk primary key (id) using index bar_pk;

今回はユニーク・インデックスは存在したがプライマリ―・キ―制約が存在しなかったので、作成した。