エラーはユーザー定義のORA-20001
範囲内にあるため、不平を言っているのは自分のコード (またはアプリケーションのコード) であり、Oracle 自体ではありません。
ID を割り当てているトリガーがサニティ チェックを行っており、挿入中に値が手動で提供されたことを確認すると、その例外が発生しているようです。これは、おそらく自分自身を保護するためであり、現在のシーケンス番号よりも大きい値を入力することを防ぎます。これにより、後でシーケンスが同じ値に達したときにエラーが発生します。(それが主キーであるか、少なくとも一意の制約があると仮定します)。
これは独自のアプリケーション コードからのものであるため、これを回避する唯一の方法は、シーケンスから ID 値を割り当てて例外をスローしているトリガーを特定して無効にすることです。
alter trigger <trigger_name> disable;
...そして、完了したら:
alter trigger <trigger_name> enable;
ただし、停止中、または少なくともこのテーブルに他の挿入がないことを保証できる場合にのみ、これを行います。トリガーが無効になっている間の挿入には、ID が割り当てられません。それらもエラーになるはずです-再びそれが主キーであるか、またはnullではない一意のキーであると仮定します-しかし、それはまだ望ましくありません。
他の挿入を本当に防ぐことができない場合は、(一時的に) 健全性チェックなしでトリガーを再作成できますが、そうであっても、それは簡単なことではありません。
もちろん、それが合成キーである場合、実際のキー値は重要ではありません。その場合、通常の挿入を実行して、再挿入された行の新しい ID 値を取得する必要があります。他のテーブルに参照がある場合3
、外部キー制約がないように思えます。これにより、最初にその行が削除されるのを防ぐことができます。