在我的项目中,我需要运行一个cron作业 - 它将在午夜查询Table并从所选行中创建数据对象。
此表的大小会在一段时间内增长 - 因此,目的是仅查询(选择) - 自上次运行以来已更新的新OR行。
oracle有没有办法做到这一点。
问候
答案 0 :(得分:0)
一个想法是在表中有一个标志,当处理完行时,该标志被设置为TRUE。然后,可以使该过程仅在未处理(FALSE)的行上运行,而不管日期(如果由于某种原因午夜运行失败)。
答案 1 :(得分:0)
oracle system change number应该对你有所帮助。 将它与支持表结合使用:
create table support_table (
m_pk master_table.master_pk%TYPE
, supp_scn NUMBER
);
在工具设置期间向支持表提供有关在主表中对记录进行的最后一次更改的信息,然后在每次批处理运行之后:
delete
from support_table
;
insert
into support_table ( m_pk, supp_scn )
select master_pk
, ORA_ROWSCN
from master_table
;
检查哪些行已更改:
select m.master_pk
, ORA_ROWSCN scn
from master_table m
left join support_table supp ON ( supp.m_pk = mthen.master_pk )
where supp.m_pk IS NULL
OR supp.supp_scn <> m.master_pk
;
该结果集将包含已更改记录的master_pk
以及自上次检查后添加的记录。