我有两个表,dcr_details_new 和 dcr_details_old,其中主键是 DCRDID。
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
select 语句进行过滤时,会返回许多记录,而当我尝试循环并插入时,我总是会弄乱主键,因为它没有按我的意愿递增。
这是我尝试过的循环和我得到的错误。
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
我必须手动输入的新值。
有什么简单的方法可以继续吗?请寻求您的帮助。