Oracle
 sql >> база данни >  >> RDS >> Oracle

Уникално нарушение на ограничение по време на вмъкване:защо? (Оракул)

Вероятно, тъй като не предоставяте стойност за DB_ID колона, тази стойност се попълва от ниво на ред преди тригер за вмъкване, дефиниран в таблицата. Предполага се, че този тригер избира стойността от последователност.

Тъй като данните бяха преместени (вероятно наскоро) от производствената база данни, моят залог би бил, че когато данните бяха копирани, последователността също не беше променена. Предполагам, че последователността генерира стойности, които са много по-ниски от най-големия DB_ID който в момента е в таблицата, водеща до грешката.

Можете да потвърдите това подозрение, като погледнете тригера, за да определите коя последователност се използва и направите

SELECT <<sequence name>>.nextval
  FROM dual

и сравнявайки това с

SELECT MAX(db_id)
  FROM cmdb_db

Ако, както подозирам, последователността генерира стойности, които вече съществуват в базата данни, можете да увеличите последователността, докато започне да генерира неизползвани стойности, или можете да я промените, за да зададете INCREMENT към нещо много голямо, вземете nextval веднъж и задайте INCREMENT обратно към 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. Oracle SQL заявка за изваждане на време от клеймо за време

  2. Как да издигнем изключение в тригер? Има ли начин да се направи това?

  3. Създаване на CSV файл на Loop | PLSQL Oracle SQL разработчик

  4. Разлика между FOR UPDATE OF и FOR UPDATE

  5. Изпълнение на Total от Group SQL (Oracle)