ORA-02291: ограничение целостности

У меня проблемы с ORA-02291: ограничение целостности, у меня есть таблица (TF_MODE), которая связана с другой таблицей (PRODUCT), так что вы можете иметь строку в TF_MODE для различных продуктов. Проблема в том, что я могу идеально вставить 10 строк в таблицу TF_MODE, но в тот момент, когда я пытаюсь вставить 11-ую строку (то есть, когда ID = 11), я получаю "ORA-02291: ограничение целостности", даже если внешний ключ существует для 11-я запись в таблице PRODUCT, странно то, что запрос успешен, если я изменил идентификатор, скажем, 12/14, но для некоторых идентификаторов он не будет работать, например, 999,1000; не существует фиксированного шаблона, для которого он не будет работать, поэтому в основном проблема заключается именно в нескольких значениях идентификаторов, а не в том, что для этого внешнего ключа значение не существует в родительской таблице (на самом деле значение существует).

Я использую Oracle 11g.

Есть идеи, что может быть причиной этого странного поведения?

Спасибо!

Обновить:

Триггеров нет, единственными проверочными ограничениями являются "НЕ НУЛЬ".

TFMODE:

CREATE TABLE "DESIGN"."TFMODE"
(
"ID"                NUMBER(38,0) NOT NULL ENABLE,
"F_PRODUCT"         NUMBER(38,0) NOT NULL ENABLE,
"SYS.CURRENT_I[MA]" NUMBER(10,3) NOT NULL ENABLE,
"LAST_MODIFIED_DATE" DATE NOT NULL ENABLE,
"VOLTAGE" NUMBER(10,3) NOT NULL ENABLE,
CONSTRAINT "TFMODE_PK" PRIMARY KEY ("ID") USING 
INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(
INITIAL 81920 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 
0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT 
CELL_FLASH_CACHE DEFAULT) TABLESPACE "DESIGN" ENABLE,
CONSTRAINT "TFMODE_PRODUCT_FK1" FOREIGN KEY ("ID") REFERENCES 
 "DESIGN"."PRODUCT" ("ID") ENABLE
) 

 SEGMENT CREATION IMMEDIATE PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
NOCOMPRESS LOGGING STORAGE
(
INITIAL 81920 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0
FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT 
CELL_FLASH_CACHE DEFAULT
)
TABLESPACE "DESIGN" ;

ТОВАР:

CREATE TABLE "DESIGN"."PRODUCT"
(
"ID"           NUMBER(*,0) NOT NULL ENABLE,
"MANUFACTURER" VARCHAR2(100 BYTE),
...
)
TABLESPACE "DESIGN" ;

Таблица PRODUCT имеет много столбцов и для краткости опущена.

Вставить заявление (из Java-приложения):

INSERT INTO TFMODE VALUES  ( 11, 953, 2.27, to_date('2014-11-18','YYYY-MM-DD'), 3.8) 

Я пытался редактировать вещи от разработчика SQL, но те же результаты, вот снимки экрана:

ID = 11 не работает

ID=12 работ

1 ответ

Решение

Проверьте определение внешнего ключа. Не должно ли это быть

CONSTRAINT "TFMODE_PRODUCT_FK1" FOREIGN KEY ("F_PRODUCT") REFERENCES 
 "DESIGN"."PRODUCT" ("ID") ENABLE
) 

в опубликованном вы связываете два первичных ключа, что не имеет особого смысла

Другие вопросы по тегам