2017-08-03 11 views
0

Oracle 12cデータベースを使用していて、1つの問題をテストします。Oracle FKの制約が適用されていません

Webサービス要求を実行すると、制約名(YYY.FK_L_TILSYNSOBJEKT_BEGRENSNING)に基になるORA-02292エラーが戻されます。ここ は、制約を持つテーブルのSQLです:

CONSTRAINT "FK_L_TILSYNSOBJEKT_BEGRENSNING" FOREIGN KEY ("BEGRENSNING") 
    REFERENCES "XXX"."BEGRENSNING" ("IDSTRING") DEFERRABLE INITIALLY DEFERRED ENABLE NOVALIDATE 

問題は、私はテーブルから(両方のテーブルで)有効IDSTRINGで手動で行を削除しようとすること、である - それが正常にそれをしません。

このように動作する原因は何ですか?私が与えるべき他の情報はありますか?

+2

Plsは「成功しますか」を定義します。あなたの制約は延期可能であり、実際には最初は延期されていることに注意してください。 –

+0

@ErwinSmout - 単に行を削除するだけですが、遅延が何をするのかは分かりません。今度はそれを読む – Medardas

+2

'最初に延期されました 'は、**トランザクション**の終わりに制約をチェックする必要があることを意味します。これは一般的に、 'DELETE'、' INSERT'、 'UPDATE'などを持つことができることを意味し、制約は' COMMIT'(またはDDL文の実行やセッションからの切断など)を発行したときにのみチェックされます。あなたは 'COMMIT'でも生き残ったという点で' DELETE'が成功したと言っていますか?それは奇妙です。 – mathguy

答えて

0

誰かを助けるかどうかわかりませんが、それはかなりばかげた過ちですから、人々が答えを求めるので、私はそれを有用にしようとします。

キーワードDEFERRABLE INITIALLY DEFERREDは、クエリを発行した直後に、チェックを行いINITIALLY IMMEDIATE、とは対照的に、その制約がないクエリーの実行時にコミットで適用されることを意味、しかし、このキーワードは、すべてのクエリ以降(データベースのバルクは少し遅く更新しますトランザクションでは、制約によってチェックする必要がありますが、初期の見解では、全体のバルクがロールバックされ、追加の不要なクエリが発行されず、何かが実行できるという問題がある場合には、敬意。

エラーORA-02292は、DELETE文の場合のみ表示され、文をデバッグするのが少し簡単です。

関連する問題