Oracleビューの更新条件-キー保存テーブル(ORA-01779:非キー値保存テーブルに対応する列を変更できません)



Oracle View Update Condition Key Preserved Tables Ora 01779



先週ビューの更新を行ったときに、間違いを犯しました。ORA-01779:非キー値保存テーブルに対応する列を変更できません。この問題を解決するために、私は多くの人々のブログを閲覧しました、そしてそれらのほとんどは本質的な問題がどこにあるかは言うまでもなく、ただ例を挙げました。このブログだけがこの問題について非常に深く議論しています、あなたはそれを読むことができます: ORA-01752のエラーから、現象を通して本質を見てください

ORA-01779 cannot modify a column which maps to a non key-preserved table



この問題を解決するための鍵は、キー保存テーブルとは何かを理解することです。



以上が公式文書の説明です。大まかに言うと、キー保存テーブルを理解することは、マルチテーブル接続ビューの更新条件を理解するための基礎です。テーブルがキー保存テーブルである場合、条件が満たされます。その各主キー(または一意のキー)は、ビューの主キー(または一意のキー)でもあります。したがって、キー保存テーブルの主キー(または一意キー)は、複数のテーブルを接続した後も保持されます。

emp.deptno = dept.deptnoを介してempとdeptを接続すると、結果は次のようになります。



上記のビューでは、empnoはempテーブルの主キーであり、接続結果の主キーでもあるため、empはキー保存テーブルです。ただし、deptnoはdeptテーブルの主キーですが、接続結果の主キーではないため、deptテーブルはキー保存テーブルではありません。

したがって、接続結果の部門テーブルのフィールドを変更しようとすると、ORA-01779が報告されます。非キー値保存テーブルに対応する列は変更できません。

empテーブルのフィールドを変更している間、成功します。

好奇心のために、私は他のさまざまな制限を試しましたが、その後、不可解な現象が発生しました。

接続条件の後に値を追加したところ、empがキー保存されていないテーブルになりました。キー保存テーブルは、自然接続、自己接続、または外部接続で接続する必要がありますか?