sql >> Database teknologi >  >> RDS >> Oracle

Unik overtrædelse af begrænsninger under indsættelse:hvorfor? (Oracle)

Formentlig, da du ikke angiver en værdi for DB_ID kolonne, udfyldes denne værdi af et række-niveau før indsættelsesudløser defineret i tabellen. Den trigger er formodentlig at vælge værdien fra en sekvens.

Da dataene blev flyttet (formodentlig for nylig) fra produktionsdatabasen, ville min indsats være, at når dataene blev kopieret, blev sekvensen ikke også ændret. Jeg vil gætte på, at sekvensen genererer værdier, der er meget lavere end den største DB_ID som i øjeblikket er i tabellen, der fører til fejlen.

Du kan bekræfte denne mistanke ved at se på triggeren for at afgøre, hvilken sekvens der bruges og gøre en

SELECT <<sequence name>>.nextval
  FROM dual

og sammenligne det med

SELECT MAX(db_id)
  FROM cmdb_db

Hvis, som jeg formoder, genererer sekvensen værdier, der allerede findes i databasen, kan du øge sekvensen, indtil den genererer ubrugte værdier, eller du kan ændre den for at indstille INCREMENT til noget meget stort, få næste val en gang, og indstil INCREMENT tilbage til 1.



  1. Hvordan bestemmer man værtsnavnet i Oracle APEX?

  2. Skal jeg bruge datatypen datetime eller timestamp i MySQL?

  3. Teksten var afkortet, eller et eller flere tegn matchede ikke målkodesiden ved import fra Excel-fil

  4. Opdatering af visninger i MySQL