1

これは奇妙なことです...2つのテーブルtableAとtableBtableBがtableAに外部キーを持っています。

2つのsprocがあり、1つはtableAに挿入し、もう1つはtableBに挿入します。

odp.netを使用して、最初のsprocを実行し、tableAにレコードを挿入します。次に、SQLPlusを開いて、このレコードを選択できます

次に、2番目のsprocを実行して、tableBに挿入します。 「ora-02291-integrity-constraint-violated-parent-key-not-found」で失敗します

ダブル、トリプル、クワッドのタイプミスなどをチェックしています...何もありません。

SQLPlusで同じ操作を同じsprocを使用して手動で実行すると、さらに奇妙なことになりますが、問題なく機能します。

これは私が単純でなければならないことを知っている何かを探して私を12時間以上殺しています。これがsprocです。

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

2 に答える 2

0

ええ、私は確かです-FKEYが疑いの余地はありません。
そうは言っても私はこれを修正しました.....ちなみにこれはすっごくばかげています。
私は、ODP.NETの「名前付きパラメーター」は、ストアドプロシージャで参照されているのと同じ順序でこれらのパラメーターを追加する必要がないことを意味するという(誤った)仮定の下にありました。簡単に言うと、これを約4回書き直した後、パラメーターの順序を変更したところ、修正されました。– </ p>

于 2012-05-14T16:24:55.840 に答える
0

私にとって、ORA-02291 エラーは、使用されている FK の 1 つが有効な pk ではないか、他のテーブルの既存の pk ではないことを意味します。

TABLEに挿入された各FKが有効なものであることを確認してください。

于 2016-02-02T03:21:28.160 に答える