主キーが DCRDID である dcr_details_new と dcr_details_old の 2 つのテーブルがあります。
dcr_details_new テーブルと dcr_details_old テーブルはどちらも同じ構造を共有しています。主キーは DCRDID で、挿入ごとに 1 ずつインクリメントします。
dcr_details_old から dcr_details_new にすべての行をフェッチする必要があり、DOCREGNO と DCR_No でレコードをフィルター処理する必要があります。
したがって、通常の単一行のインポート/挿入は、次のように正確に実行されます。
INSERT INTO dcr_details_new
SELECT (select Max(DCRDID) + 1 from dcr_details_new),
TWNCODE,
'100008',
DOCCATOGARY,
DCR_NO,
VISIT_NO,
GIVEAWAY,
COMPETITORBRN,
REMARK,
DCRDRDATE,
COM_ACTI
FROM dcr_details_old
WHERE DOCREGNO= 'T10037'
and DCR_NO = 28766;
1 rows created.
dcr_no
ここで、フィルタリングをスキップして、異なる を持つレコードが多すぎるため、レコードを挿入したいと考えていますdcr_no
。ここで、選択ステートメントのみでフィルタリングすると DOCREGNO
多くのレコードが返され、ループして挿入しようとすると、必要に応じてインクリメントされないため、常に主キーを台無しにします。
これが私が試したループと私が得ているエラーです。
declare
i integer := 1;
BEGIN
FOR x IN (select * from dcr_details_old WHERE DOCREGNO= 'T10037')
LOOP
INSERT INTO dcr_details_new (DCRDID, TWNCODE, DOCREGNO, DOCCATOGARY,
DCR_NO, VISIT_NO, GIVEAWAY, COMPETITORBRN,
REMARK, DCRDRDATE, COM_ACTI)
SELECT (select Max(DCRDID) + 1 from dcr_details_new),
TWNCODE,
'100008',
DOCCATOGARY,
DCR_NO, VISIT_NO, GIVEAWAY, COMPETITORBRN,
REMARK, DCRDRDATE, COM_ACTI
FROM dcr_details_old;
i := i + 1;
END LOOP;
END;
エラー:
**ERROR at line 1:
ORA-00001: unique constraint (SYS_C0061873) violated
ORA-06512: at line 5**
このエラーSYS_C0061873
には主キーがありますDCRDID
。ここに挿入する値は、手動で入力する必要'100008'
がある新しい値です。docregno
続行する簡単な方法はありますか?どうぞよろしくお願いいたします。