sql >> Databáze >  >> RDS >> Oracle

Jedinečné porušení omezení během vkládání:proč? (Věštec)

Pravděpodobně proto, že nezadáváte hodnotu pro DB_ID sloupec, tato hodnota je naplněna na úrovni řádku před vložením trigger definovaným v tabulce. Tím spouštěčem je pravděpodobně výběr hodnoty ze sekvence.

Vzhledem k tomu, že data byla přesunuta (pravděpodobně nedávno) z produkční databáze, vsadil bych na to, že když byla data zkopírována, sekvence se také nezměnila. Tipoval bych, že sekvence generuje hodnoty, které jsou mnohem nižší než největší DB_ID která je aktuálně v tabulce vedoucí k chybě.

Toto podezření můžete potvrdit tím, že se podíváte na spouštěč, abyste zjistili, která sekvence se používá, a proveďte a

SELECT <<sequence name>>.nextval
  FROM dual

a porovnat to s

SELECT MAX(db_id)
  FROM cmdb_db

Pokud, jak mám podezření, sekvence generuje hodnoty, které již v databázi existují, můžete sekvenci zvyšovat, dokud negeneruje nepoužité hodnoty, nebo ji můžete změnit tak, aby nastavila hodnotu INCREMENT na něco velmi velkého, jednou získejte nextval a nastavte INCREMENT zpět na 1.



  1. MySQL vyhledávání v seznamu čárek

  2. Převeďte desetinný rok na datum

  3. Postgres:zkontrolujte, zda pole pole obsahuje hodnotu?

  4. Count Records Returned MySQL Doctrine