ORACLE機能 ORAエラー

[ORAエラー] ORA-01779: キー保存されていない表にマップする列は変更できません

投稿日:2018年9月6日 更新日:

以下のように表示されます。

(日本語)
ORA-01779: キー保存されていない表にマップする列は変更できません
(英語)
ORA-01779: cannot modify a column which maps to a non key-preserved table.

発生パターン

このエラーは以下のような場合に発生します。

  • VIEWに対するUPDATEを行った時、更新するレコードが一意にならない。

発生例

まず、以下のようなVIEWを作成します。

VIEWの作成
SQL> select * from tbl01; LOT CODE -------------------- --------- 100 A 200 B 300 C SQL> select * from tbl02; CODE NAME -------------------- --------- A aaa B bbb C ccc D ddd E eee SQL> CREATE OR REPLACE VIEW v_test (LOT, NAME) AS SELECT a.lot, b.name FROM tbl01 a, tbl02 b WHERE a.code = b.code(+) /

上記で作成したVIEWに対して、以下のようなUPDATEを行います。

エラー例
SQL> update v_test set name = 'xxx' where lot = '200'; update v_test set name = 'xxx' where lot = '200' * 行1でエラーが発生しました。: ORA-01779: キー保存されていない表にマップする列は変更できません

tbl02.nameを更新するレコードが一意とならないため、エラーとなります。

対処法

  • VIEWのSELECTを主キーの内部結合とし、レコードが一意となるようにする。
  • VIEWではなく、TABLEを直接更新する。

スポンサーリンク

スポンサーリンク

-ORACLE機能, ORAエラー

執筆者:



comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

スポンサーリンク