Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Unikalne naruszenie ograniczeń podczas wstawiania:dlaczego? (Wyrocznia)

Przypuszczalnie, ponieważ nie podajesz wartości dla DB_ID kolumna, ta wartość jest wypełniana przez poziom wiersza przed wyzwalaczem wstawiania zdefiniowanym w tabeli. Prawdopodobnie tym wyzwalaczem jest wybór wartości z sekwencji.

Ponieważ dane zostały przeniesione (prawdopodobnie niedawno) z produkcyjnej bazy danych, założę się, że po skopiowaniu danych sekwencja również nie została zmodyfikowana. Domyślam się, że sekwencja generuje wartości, które są znacznie niższe niż największy DB_ID który jest aktualnie w tabeli prowadzącej do błędu.

Możesz potwierdzić to podejrzenie, patrząc na wyzwalacz, aby określić, która sekwencja jest używana, i wykonując

SELECT <<sequence name>>.nextval
  FROM dual

i porównując to z

SELECT MAX(db_id)
  FROM cmdb_db

Jeśli, jak podejrzewam, sekwencja generuje wartości, które już istnieją w bazie danych, możesz inkrementować sekwencję, aż generuje nieużywane wartości lub możesz to zmienić, aby ustawić INCREMENT na coś bardzo dużego, pobierz nextval raz i ustaw INCREMENT wróć do 1.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wyłączyć wygaśnięcie hasła Oracle?

  2. Jak uruchomić tworzenie tabeli DDL z EXECUTE IMMEDIATE w bazie danych Oracle?

  3. Oracle utwórz tabelę za pomocą klauzuli

  4. Cienki sterownik Oracle a sterownik OCI. Plusy i minusy?

  5. Jak utworzyć zdefiniowaną przez użytkownika zmienną typu danych rekordu w bazie danych Oracle