c#ora-02291错误

时间:2012-05-12 04:47:43

标签: oracle10g odp.net

这是一个奇怪的... 我有两个表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;

2 个答案:

答案 0 :(得分:0)

是的我不仅仅是确定 - FKEY毫无疑问 那就是说我修好了......顺便说一下,这是 sooooooo愚蠢  我在(错误的)假设ODP.NET中的'命名参数'意味着我不必按照它们在存储过程中引用的相同顺序添加这些参数。长话短说 - 在我重写了大约4次后,我修改了参数的顺序,现在它已经修复了。 -

答案 1 :(得分:0)

对我来说,ORA-02291错误意味着所使用的FK之一不是有效的pk,或者不是来自另一个表的现有pk。

只需确保在TABLE中插入的每个FK都是有效的。