【发布时间】:2014-03-06 12:04:31
【问题描述】:
我有 MAIN_TABLE,其中包含 700 万条记录。我必须
- 在 MAIN_TABLE 中保留最近 3 个月的数据
- 在 MAIN_TABLE_ARCHIVAL 中归档过去 4 到 12 个月的数据
- 清除所有超过 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 新手。谁能告诉我为什么会这样?我应该如何执行上述任务?
【问题讨论】: