ORA-02291:完整性约束

时间:2015-02-11 11:29:32

标签: sql oracle ora-02291

我很难用 ORA-02291:完整性约束,我有一个表( TF_MODE ),它链接到另一个表( PRODUCT < / em>)这样你就可以在TF_MODE中为各种产品添加一行。问题是我可以在TF_MODE表中完美地插入10行,但是当我尝试插入第11行时(即当ID = 11时),我得到&#34; ORA-02291:完整性约束&#34; 即使外键确实存在于PRODUCT表中的第11个条目,但奇怪的是,如果我将ID更改为12/14,那么查询就会成功,但对于某些ID&#39它不会工作,例如999,1000;没有固定的模式,它不会工作,所以基本上问题特别是很少的ID值,而不是因为对于那个外键的价值不是存在于父表中(实际上该值确实存在)。

我正在使用Oracle 11g。

知道这种奇怪行为背后的原因是什么?

谢谢!

更新

没有触发器,唯一的检查限制是“不是空”&#39;。

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" ;

PRODUCT:

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

PRODUCT表中包含许多列,为简洁起见,已将其省略。

插入Statement(来自java应用程序):

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

我尝试从sql开发人员编辑内容但结果相同,这里是屏幕截图:

ID = 11无效

enter image description here

ID = 12有效

enter image description here

1 个答案:

答案 0 :(得分:4)

检查您的外键定义。不应该是

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

在发布的帖子中,你链接了两个没有多大意义的主键