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

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

関連記事

ORACLE

[V$表] 初期化パラメータの情報を取得する(V$PARAMETER)

初期化パラメータの情報を参照するには、V$PARAMETERビューを参照します。 V$PARAMETERの定義 V$PA ...
ORACLE

[SQL] カラムを結合した結果をSELECTしたい

カラムを結合した結果をSELECTするには、カラムを「||」でくっつければOKです。 サンプル 例)PREF_NM、CI ...
ORACLE

[ORACLE関数] 大文字・小文字を変換する(UPPER, LOWER)

大文字・小文字を変換するには、UPPERまたはLOWERを使用します。 構文 (大文字にする) UPPER(<文字列>) ...
ORACLE

[V$表] 制御ファイルの情報を取得する(V$CONTROLFILE)

制御ファイルの情報を参照するには、V$CONTROLFILEビューを参照します。 V$CONTROLFILEの定義 V$ ...
ORACLE

[ORAエラー] ORA-00933: SQLコマンドが正しく終了されていません。

以下のように表示されます。 (日本語) ORA-00933: SQLコマンドが正しく終了されていません。 (英語) OR ...

スポンサーリンク