sql >> Databasteknik >  >> RDS >> Oracle

Unik begränsningsöverträdelse under infogning:varför? (Orakel)

Förmodligen eftersom du inte anger ett värde för DB_ID kolumnen fylls det värdet på av en radnivå före infogningsutlösaren definierad i tabellen. Den utlösaren är förmodligen att välja värdet från en sekvens.

Eftersom data flyttades (förmodligen nyligen) från produktionsdatabasen, skulle min satsning vara att när data kopierades ändrades inte sekvensen likaså. Jag skulle gissa att sekvensen genererar värden som är mycket lägre än den största DB_ID som för närvarande finns i tabellen som leder till felet.

Du kan bekräfta denna misstanke genom att titta på utlösaren för att avgöra vilken sekvens som används och göra en

SELECT <<sequence name>>.nextval
  FROM dual

och jämföra det med

SELECT MAX(db_id)
  FROM cmdb_db

Om, som jag misstänker, sekvensen genererar värden som redan finns i databasen, kan du öka sekvensen tills den genererar oanvända värden eller så kan du ändra den för att ställa in INCREMENT till något mycket stort, hämta nästa val en gång och ställ in INCREMENT tillbaka till 1.



  1. Få det totala antalet rader i sidnumreringsfrågan

  2. Refererar till ett associativt matrisvärde från PDO::FETCH_ASSOC

  3. MySql arbetsbänk KONTROLLERA begränsning

  4. Mysql Left Join Null Result