我很难使用ORA-02291: 完整性约束,我有一个表(TF_MODE),它链接到另一个表(PRODUCT),这样您就可以在 TF_MODE 中为各种产品设置一行。问题是我可以在 TF_MODE 表中完美插入 10 行,但是当我尝试插入第 11 行时(即当 ID = 11 时)我得到“ORA-02291:完整性约束”,即使外键确实存在PRODUCT 表中的第 11 个条目,奇怪的是,如果我将 ID 更改为 12/14,则查询成功,但对于某些 ID,它将不起作用,例如 999,1000 ;没有固定的模式无法正常工作,所以基本上问题出在少数 ID 值上而不是因为该外键的值不存在于父表中(实际上该值确实存在)。
我正在使用 Oracle 11g。
知道这种奇怪行为背后的原因是什么吗?
谢谢 !
更新:
没有触发器,唯一的检查约束是“IS NOT NULL”。
TF模式:
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 developer 编辑东西,但结果相同,这是屏幕截图:
ID=11 不起作用
ID=12 作品