3

私には-私にとっては不明な-問題があり、その背後にある論理/原因が何であるかわかりません。テーブルにレコードを挿入しようとすると、次のようなDB2エラーが発生します。

[SQL0803] Duplicate key value specified: A unique index or unique constraint *N in *N
exists over one or more columns of table TABLEXXX in SCHEMAYYY. The operation cannot 
be performed because one or more values would have produced a duplicate key in 
the unique index or constraint.

これは私にとって非常に明確なメッセージです。しかし、実際には、新しいレコードを挿入して、どのレコードがすでにそこにあるかを確認した場合、重複するキーはありません。を実行してSELECT COUNT(*) from SCHEMAYYY.TABLEXXXからレコードを挿入しようとすると、問題なく機能します。

実行時にSELECT COUNT(*)突然レコードを挿入できるのはどうしてですか?同期していないために問題が発生する可能性のある、それに関連付けられたある種のインデックスはありますか?私はデータモデルを設計していなかったので、システムについての深い知識はまだありません。

元のDB2SQLは次のとおりです。

--  Generate SQL 
--  Version:                    V6R1M0 080215 
--  Generated on:               19/12/12 10:28:39 
--  Relational Database:        S656C89D 
--  Standards Option:           DB2 for i 
CREATE TABLE TZVDB.PRODUCTCOSTS ( 
    ID INTEGER GENERATED BY DEFAULT AS IDENTITY ( 
START WITH 1 INCREMENT BY 1 
MINVALUE 1 MAXVALUE 2147483647 
NO CYCLE NO ORDER 
CACHE 20 ) 
, 
PRODUCT_ID INTEGER DEFAULT NULL , 
STARTPRICE DECIMAL(7, 2) DEFAULT NULL , 
FROMDATE TIMESTAMP DEFAULT NULL , 
TILLDATE TIMESTAMP DEFAULT NULL , 
CONSTRAINT TZVDB.PRODUCTCOSTS_PK PRIMARY KEY( ID ) ) ; 

ALTER TABLE TZVDB.PRODUCTCOSTS 
ADD CONSTRAINT TZVDB.PRODCSTS_PRDCT_FK 
FOREIGN KEY( PRODUCT_ID ) 
REFERENCES TZVDB.PRODUCT ( ID ) 
ON DELETE RESTRICT 
ON UPDATE NO ACTION;
4

3 に答える 3

2

ステートメントを確認したいのですが...この質問は1年前のものなので...私は息を切らしません.

問題は GENERATED BY DEFAULT である可能性があると考えています

また、ID 列に NULL を渡す代わりに、誤ってゼロまたはその他の重複値を最初に渡しています。

常に NULL を渡すか、重複しない値を渡すか、GENERATED ALWAYS に切り替えます。

于 2014-01-26T01:56:34.920 に答える
1

これを引き起こした原因の詳細については、ジョブログの先行するメッセージを参照してください。COUNT(*)の後でINSERTが突然どのように機能するのかわかりません。見つけたものを教えてください。

*Nインデックスまたはconstraintgの名前として(つまりn / a)が表示されるため、これは標準のDB2オブジェクトではなく、SQLではなくDDSで定義された「論理ファイル」[LF]である可能性があります。 COUNT(*)を実行していたものとは異なるキー構造を使用します。

あなたのショップには、依存ファイルのキーを表示するためのより優れたツールがあるかもしれませんが、以下の方法はどこでも機能します。

テーブルが実際の「物理ファイル」ではない可能性がある場合DSPFD TZVDB.PRODUCTCOSTSは、5250(「グリーンスクリーン」)セッションで「ファイルの説明の表示」を使用してこれを確認してください。

[データベースリレーションの表示]コマンドを使用しDSPDBR TZVDB.PRODUCTCOSTSて、テーブルに定義されているファイルを見つけます。次にDSPFD、これらの各ファイルで、インデックスキーの定義を確認できます。また、または*IMMEDではなく、これらの各インデックスが維持されていることを確認してください。(あなたの奇妙な異常のリモートで考えられる原因についての野蛮なロングショットの推測。) *REBUILD*DELAY

DB2 for iメッセージファインダーは、IBMi7.1インフォメーションセンターまたはその他のリリースにあります。

于 2012-12-16T20:02:31.713 に答える
0

ページングの問題ですか?行が更新のために保持されていて、挿入に必要なインデックスをおそらく含むページをロックしているときに、挿入で -0803 が発生することがありますか? これは推測にすぎませんが、私にはそれが起こっているように見えます。

于 2016-07-05T21:45:44.413 に答える