我必须创建一个搜索最近添加的记录的过程,如果有,则将它们移动到ARCHIVE表。 这是我过滤最近添加的记录的声明
选择
CL_ID,
CL_NAME,
CL_SURNAME,
CL_PHONE,
VEH_ID,
VEH_REG_NO,
VEH_MODEL,
VEH_MAKE_YEAR,
WD_ID,
WORK_DESC,
INV_ID,
INV_SERIES,
INV_NUM,
INV_DATE,
INV_PRICE
FROM
CLIENT,
INVOICE,
VEHICLE,
WORKS,
WORKS_DONE
WHERE
Client.CL_ID=Invoice.INV_CL_ID and
Invoice.INV_CL_ID = Client.CL_ID and
Client.CL_ID = Vehicle.VEH_CL_ID and
Vehicle.VEH_ID = Works_Done.WD_VEH_ID and
Works_done.WD_INV_ID = Invoice.INV_ID and
WORKS_DONE.WD_WORK_ID = Works.WORK_ID and
Works_done. Timestamp >= sysdate -1;
答案 0 :(得分:0)
你可能需要这样的东西(伪代码):
create or replace procedure moveRecords is
vLimitDate timestamp := systimestamp -1;
begin
insert into table2
select *
from table1
where your_date >= vLimitDate;
--
delete table1
where your_date >= vLimitDate;
end;
答案 1 :(得分:0)
O.K。可能是这样的......
缺点是 - 大型桌子可能会很慢。
好处是不依赖日期和时间 - 所以你可以随时运行它并将你的档案与实时数据同步......
create or replace procedure archive is
begin
insert into archive_table
(
select * from main_table
minus
select * from archive_table
);
end;
答案 2 :(得分:0)
以下是我过去用于此类任务的步骤。
使用GTT和ROWID的业务可确保您在选择的行集中具有100%保证的稳定性,然后从源表中删除,无论在选择和开始之间可能发生的任何更改删除的开始(除了某人导致分区表行迁移或缩小表)。
您也可以通过更改事务隔离级别来实现此目的。