这是一个奇怪的... 我有两个表tableA和tableB tableB在tableA中有一个外键。
我有2个sprocs,一个插入tableA,另一个插入tableB。
使用odp.net我运行第一个sproc,将记录插入tableA。然后我可以打开SQLPlus并选择此记录
然后我运行第二个sproc,插入tableB。 失败并显示“ora-02291-integrity-constraint-violationlated-parent-key-not-found”
我有双重,三重,四重检查错别字......等等。
当我在SQLPlus中手动执行相同的操作时,使用相同的sprocs使事情更加奇怪,它可以顺利运行。
这让我花费了12个多小时寻找我知道必须简单的东西。 这是sprocs。
SPROCA
CREATE OR REPLACE PROCEDURE genData_TestTrackerSegment
(
INTX_ID IN IntxSegment.IntxID%TYPE,
siteid IN INT
)
AS
BEGIN
INSERT INTO INTXSEGMENT(INTXID,INTXTYPEID,VERSION,ISPRIVATE,
SEGMENTTYPE,STARTDATETIME,INTXDIRECTION,SITEID)
VALUES(INTX_ID,1,1,0,1,SYSDATE,1,siteid);
COMMIT;
END;
SPROCB
CREATE OR REPLACE PROCEDURE genData_TestTrackerPart
(
INTX_ID IN IntxSegment.IntxID%TYPE,
INTX_PART_ID IN INTX_PARTICIPANT.INTX_PART_ID%TYPE,
INDIVID IN INDIVIDUAL.INDIVID%TYPE,
CALLID IN INTX_PARTICIPANT.CALLIDKEY%TYPE
)AS
BEGIN
INSERT INTO
INTX_PARTICIPANT(INTXID,INTX_PART_ID,INDIVID,ROLE,
CALLIDKEY,RECORDED,VERSION,STARTDATETIME)
VALUES(INTX_ID,INTX_PART_ID,INDIVID,1,CALLID,1,1,SYSDATE);
COMMIT;
END;
答案 0 :(得分:0)
是的我不仅仅是确定 - FKEY毫无疑问 那就是说我修好了......顺便说一下,这是 sooooooo愚蠢 我在(错误的)假设ODP.NET中的'命名参数'意味着我不必按照它们在存储过程中引用的相同顺序添加这些参数。长话短说 - 在我重写了大约4次后,我修改了参数的顺序,现在它已经修复了。 -
答案 1 :(得分:0)
对我来说,ORA-02291错误意味着所使用的FK之一不是有效的pk,或者不是来自另一个表的现有pk。
只需确保在TABLE中插入的每个FK都是有效的。