sql >> データベース >  >> RDS >> Oracle

ORACLE更新トリガー後:ORA-04091変更テーブルエラーの解決

    「値に一時テーブルを使用したり、自律トランザクションを使用したりせずに、テーブルの変更エラーを回避する方法はありますか?」

    tl; dr いいえ。

    テーブルの変更エラーは、トリガーを所有するテーブル、または所有するテーブルとの外部キー関係に関係するテーブルを照会することによって発生します(少なくとも古いバージョンのデータベースでは、まだ取得しているかどうかはわかりません)。

    適切に設計されたアプリケーションでは、これは必要ありません。これが、多くの人がテーブルの変更を不十分なデータモデリングの指標と見なしている理由です。たとえば、突然変異はしばしば不十分な正規化と関連しています。

    ジェイミー・ザウィンスキーを言い換えると、変化するテーブルの例外に直面したときに、「わかっています。自律型トランザクションを使用します」と考える人もいます。今、彼らは2つの問題を抱えています。

    BEFORE INSERT OR UPDATEトリガーの:NEW値を変更するか、仮想列を使用することで、エラーを回避できる場合があります。ただし、これらが当てはまるかどうかを確認するには、詳細を投稿する必要があります。

    ただし、最善の回避策は、他の種類を必要としないことです。




    1. SQLServerの既存のテーブルに計算列を追加する

    2. SQLiteで主キーを持つ重複行を削除する6つの方法

    3. コマンドラインインターフェイス(CLI)を使用してMySQLデータベースを作成する方法

    4. 修正方法「WITHRESULTSETS句で結果セットに2列が指定されたため、EXECUTEステートメントが失敗しました…」SQLServerのメッセージ11537