私たちはOracle Databaseを持っており、多くのデータを格納する表があります。 この表にはプライマリ・キーがあります。通常、これらのプライマリ・キーは挿入時に作成されます新しい行のORA-00001:一意キー:手動でプライマリ・キーを設定する
しかし、ここでは、特定の固定プライマリキーを使用してこのテーブルにデータを手動で挿入する必要があります。これらの主キーを変更する方法はありません。例えばので
:
は、私たちのテーブルには、すでに20 に主キー1と20個のエントリは、今では21〜23
主キーを使用して手動でデータを追加する必要がありました誰かが標準的な方法で行を入力したい場合、挿入プロセスは次の理由で失敗します。
Caused by: java.sql.BatchUpdateException: ORA-00001: Unique Constraint (VDMA.SYS_C0013552) verletzt
at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10500)
at oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.java:230)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
私は完全に理解しています次の主キーがすでに作成されているため、次の主キーを作成しているデータベースルーチン(シーケンス)が失敗します。
しかし、次のプライマリキーが21ではなく24であることを認識するために、シーケンスを再び表に表示する方法を教えてください。
UPDATE
IDが含まれているリンクを使ってWeb Interfaceを使用してレコードにアクセスしているため、IDが同じに滞在する必要がある理由です。 したがって、古いIDを新しいIDにマッピングする実装を変更するか、IDをデータベースに保存します。
アップデート2
解決策を見つけた:私たちは休止状態を使用しているので、1つの配列のみがすべてのテーブルに移入されます。したがって、私が答えを探していた4日間の主キーは非常に高くなり、すべてのデータを簡単にインポートできます。
"*これでプライマリキー21〜23 *で手動でデータを追加する必要があります。シーケンスを使用してこれらの値を挿入します。他のすべてが困ってしまうでしょう。シーケンスをテーブルで「見る」ようにする方法はありません。シーケンス値を変更する唯一の方法は、 'nextval'を呼び出すか、新しい開始値でシーケンスを削除して再作成することです。 –
シーケンスヘルプを再作成しますか? – Breiti
手作業で挿入した最大値に基づいて、次の利用可能なIDにシーケンスを一度進めます。 –