1

这是一个奇怪的......我有两个表tableA和tableB tableB在tableA中有一个外键。

我有 2 个存储过程,一个插入到 tableA,另一个插入到 tableB。

使用 odp.net 我运行第一个存储过程,将记录插入到 tableA 中。然后我可以打开 SQLPlus 并选择这条记录

然后我运行第二个存储过程,插入到 tableB 中。 它因“ora-02291-integrity-constraint-violated-parent-key-not-found”而失败

我有双重,三重,四重检查错别字等......什么都没有。

当我在 SQLPlus 中使用相同的存储过程手动执行相同的操作时,让事情变得更加奇怪,它可以毫无问题地工作。

这让我花了 12 多个小时寻找我知道必须简单的东西。这是存储过程。

斯普罗卡

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

2 回答 2

0

是的,我非常确定——毫无疑问,FKEY.
话虽这么说,我修好了这个.....顺便说一句,这太愚蠢了。
我处于(错误的)假设之下,即 ODP.NET 中的“命名参数”意味着我不必按照它们在存储过程中引用的顺序添加这些参数。长话短说——在我重写了大约 4 次之后,我修改了参数的顺序,现在它已经修复了。——</p>

于 2012-05-14T16:24:55.840 回答
0

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

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

于 2016-02-02T03:21:28.160 回答