SQL0673N
主キーまたはユニーク・キー索引は、 制約 "<name>" の識別された主キーまたはユニーク・キーの列の値と重複している行が表に含まれているため、作成されません。
説明
"<name>" によって識別される制約の主またはユニーク・キー定義が、PRIMARY KEY または UNIQUE 節の列の複製値を伴う行が、すで に変更されている表に入っているため失敗しました。
指定された場合、"<name>" は制約名です。 制約名が指定されなかった場合は、"<name>" が 3 つのピリオドが後に続く主キーまたはユニーク制約節に指定された最初の列名になります。
ステートメントは処理できません。 指定した表は変更されません。
ユーザーの処置
主キーまたはユニーク・キーの定義を試行する前に表から誤った行を除去してください。
コード
-
SQLCODE : -673
SQLSTATE : 23515
原因・対処例
主キー及びユニーク制約で指定した項目で重複レコードがあり一意にならない場合。
指定した項目で重複するレコードを削除し重複をなくす。
例えば、以下の主キーを作成SQLを実行しエラーが発生したとします。
SQL> ALTER TABLE TRN_SALARY 2 ADD CONSTRAINT PK_SALARY PRIMARY KEY (EMP_NO, PAYMENT_YM); 行 1 の近くでエラー: SQL0673N 主キーまたはユニーク・キー索引は、制約 "PK_SALARY" の識別された主キーまたはユニーク・キーの列の値と重複している行が表に含まれているため、作成されません。
以下のSQLでキー値が重複しているデータを抽出できます。
SELECT EMP_NO, PAYMENT_YM, COUNT(*) FROM TRN_SALARY GROUP BY EMP_NO, PAYMENT_YM HAVING COUNT(*) > 1 ;
実行結果は以下になります。抽出されたレコードが問題のデータになりますので削除や項目値の更新をすることにより、エラーが解消されます。
SQL> SELECT EMP_NO, PAYMENT_YM, COUNT(*) 2 FROM TRN_SALARY 3 GROUP BY EMP_NO, PAYMENT_YM 4 HAVING COUNT(*) > 1 5 ; EMP_NO PAYMENT_YM 3 ------------- ------------- ------------- 101 202107 2 102 202107 2