我有一个MAIN_TABLE,它包含7百万条记录。
1.在MAIN_TABLE中保留最近3个月的数据
1.在MAIN_TABLE_ARCHIVAL中存档最近4到12个月的数据
1.清除12个月前的所有数据
我创建了一个带有游标的存储过程,以便从MAIN_TABLE复制到MAIN_TABLE_ARCHIVAL。我有复合主键(CONSTRAINT“PK_MAIN_TABLE”PRIMARY KEY(“SERVICE”,“TR_SOURCE”,“TR_ID”)
在复制时,我得到00001. 00000 -“违反唯一约束(%s.%s)”错误,即使我没有插入任何重复的键,但同时记录被复制到MAIN_TABLE_ARCHIVE。
我的代码看起来像(我有大约20个字段,所以我没有粘贴整个代码):
DECLARE
c_id customers.id%type;
c_name customers.name%type;
c_addr customers.address%type;
CURSOR c_customers is
SELECT id, name, address FROM customers;
BEGIN
OPEN c_customers;
LOOP
FETCH c_customers into c_id, c_name, c_addr;
EXIT WHEN c_customers%notfound;
dbms_output.put_line(c_id || ' ' || c_name || ' ' || c_addr);
commit;
END LOOP;
CLOSE c_customers;
END;
/
我试着调试,但是没有成功,因为我是PL/SQL的新手。有人能告诉我为什么会发生这种情况吗?我应该如何实现上面的任务?
2条答案
按热度按时间dm7nw8vv1#
要将数据从一个表复制到另一个表,您不需要任何游标,甚至不需要存储过程。您可以使用一个简单的sql语句来实现:
若要提高性能,可以使用“+append”提示。
xqkwcwgp2#
看看这个:Unique constraint violation during insert: why? (Oracle)
将序列中的起始值与表中的MAX(ID)进行比较。
SELECT MAX(ID_Column) FROM Schema.Table; SELECT Schema.Table_Sequence.nextval from DUAL;