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

Violazione del vincolo univoco durante l'inserimento:perché? (Oracolo)

Presumibilmente, dal momento che non stai fornendo un valore per il DB_ID colonna, quel valore viene popolato da un livello di riga prima del trigger di inserimento definito nella tabella. Quel trigger, presumibilmente, sta selezionando il valore da una sequenza.

Poiché i dati sono stati spostati (presumibilmente di recente) dal database di produzione, la mia scommessa sarebbe che quando i dati sono stati copiati, anche la sequenza non è stata modificata. Immagino che la sequenza stia generando valori molto inferiori al più grande DB_ID che è attualmente nella tabella che porta all'errore.

Puoi confermare questo sospetto osservando il trigger per determinare quale sequenza viene utilizzata ed eseguendo un

SELECT <<sequence name>>.nextval
  FROM dual

e confrontandolo con

SELECT MAX(db_id)
  FROM cmdb_db

Se, come sospetto, la sequenza sta generando valori che già esistono nel database, è possibile incrementare la sequenza fino a generare valori inutilizzati oppure è possibile modificarla per impostare INCREMENT su qualcosa di molto grande, prendi nextval una volta e imposta INCREMENT torna a 1.