Oracle MV刷新而不删除数据

Oracle MV刷新而不删除数据,oracle,Oracle,专家们 我需要帮助在Oracle中创建一个物化视图,该视图不会在从基表删除时从MV中删除数据 我的基本表: 1) create table one11 (aa INT, bb INT, cc varchar2(10)); 2) alter table one11 add primary key(aa); 3) insert into one11 values(1,1,'AA'); 4) insert into one11 values(2,1,'BB'); 5) insert into one1

专家们

我需要帮助在Oracle中创建一个物化视图,该视图不会在从基表删除时从MV中删除数据

我的基本表:

1) create table one11 (aa INT, bb INT, cc varchar2(10));
2) alter table one11 add primary key(aa);
3) insert into one11 values(1,1,'AA');
4) insert into one11 values(2,1,'BB');
5) insert into one11 values(3,1,'CC');

6)CREATE MATERIALIZED VIEW LOG ON ONE11 
WITH PRIMARY KEY, SEQUENCE, ROWID(BB, CC) 
INCLUDING NEW VALUES;

7)CREATE MATERIALIZED VIEW one11_mv
REFRESH FAST
START WITH (SYSDATE) NEXT (SYSDATE + interval '1' minute)  AS
select * from one11;

8)select * from one11_mv; --After 1 min
AA  BB  CC
1   1   AA
2   1   BB
3   1   CC

9) delete from one11 where aa= 3; --After 1 min
AA  BB  CC
1   1   AA
2   1   BB

----
The expected result from MV after delete statement
AA  BB  CC
1   1   AA
2   1   BB
3   1   CC

TIA

否。要刷新MV中的数据,您有两个选项:

  • 完全刷新:在MV中重新运行查询
  • 快速刷新:应用MV日志中的所有更改
无论哪种方式,都会丢失已删除的行。因此,如果要从基表中删除行,但将它们保留在MV中,则必须更改策略

您可以采用的方法包括:

  • 滚动您自己的MV:插入/更新时将所有内容复制到另一个表
  • 更改为软删除:向表中添加一个
    is_deleted
    标志,并将设置此标志的所有
    deletes
    更改为
    updates
    。然后,MV可以包含这些“已删除”行,而所有其他应用程序代码都会隐藏这些行

我想知道这是否是一个问题,你问的是你的解决方案,而不是你的问题。您是否需要一个MV和一个表格,或者您只是在寻找一个软删除选项?如果你只是想要一个软删除,克里斯的回答有一些好的建议。您还可以使用Oracle的内置功能。或者您可以使用一个带有instead of触发器的视图来忽略或转换删除。我相信,我已经找到了解决方案。我只需要编写一些脚本,每天将基表中新添加的数据插入到自定义表中。谢谢克里斯和乔恩