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

挿入中の一意性制約違反:なぜですか? (Oracle)

    おそらく、DB_IDの値を指定していないためです。 列の場合、その値は、テーブルで定義された挿入トリガーの前に行レベルで入力されます。そのトリガーは、おそらく、シーケンスから値を選択することです。

    データは(おそらく最近)本番データベースから移動されたので、私の賭けは、データがコピーされたときにシーケンスも変更されなかったということです。シーケンスは、最大のDB_IDよりもはるかに低い値を生成していると思います それは現在、エラーの原因となっているテーブルにあります。

    トリガーを調べて使用されているシーケンスを判別し、

    を実行することで、この疑いを確認できます。
    SELECT <<sequence name>>.nextval
      FROM dual
    

    それを

    と比較します
    SELECT MAX(db_id)
      FROM cmdb_db
    

    おそらく、シーケンスがデータベースにすでに存在する値を生成している場合は、未使用の値を生成するまでシーケンスをインクリメントするか、シーケンスを変更してINCREMENTを設定できます。 非常に大きなものに変更し、nextvalを1回取得して、INCREMENTを設定します。 1に戻ります。



    1. 文字列oracleから日付を抽出します

    2. MySQLクエリ:CONCAT_WSとCOALESCEを使用して、コンマで区切られた結果値を適切に識別し、元の概念に再変換する方法

    3. MariaDBにすべてのストアドプロシージャを一覧表示する方法

    4. 大文字と小文字の区別を無視するREGEXP_COUNT