oracle full outer join bug,ORACLE:物化视图上的快速刷新在某些情况下无法使用OUTER JOIN...

问题很简单 . 我创建了由外键链接的TableFather和TableChild . 我为两者创建了物化视图日志 . 我创建物化视图,快速刷新从TableFather到TableChild的左连接 .

结果是

添加子记录,物化视图将刷新

修改子字段,刷新实体化视图

添加父记录,物化视图不会刷新

这是代码

-- Tables

CREATE TABLE TABLE_FATHER (

ID NUMBER(10, 0),

TEXT NVARCHAR2(50),

CONSTRAINT PK__TABLE1 PRIMARY KEY (ID)

);

CREATE TABLE TABLE_CHILD (

ID NUMBER(10, 0),

TEXT NVARCHAR2(50),

ID_FATHER NUMBER(10, 0),

CONSTRAINT PK__TABLE2 PRIMARY KEY (ID),

CONSTRAINT FK_TABLE_FATHER FOREIGN KEY (ID_FATHER)

REFERENCES TABLE_FATHER (ID)

);

-- Some record before materialized view creation

INSERT INTO TABLE_FATHER(ID, TEXT) VALUES(1, 'father1');

INSERT INTO TABLE_CHILD(ID, TEXT, ID_FATHER) VALUES(1, 'child1', 1);

INSERT INTO TABLE_CHILD(ID, TEXT, ID_FATHER) VALUES(2, 'child2', 1);

-- Logs

CREATE MATERIALIZED VIEW LOG on TABLE_FATHER WITH PRIMARY KEY, ROWID;

CREATE MATERIALIZED VIEW LOG on TABLE_CHILD WITH PRIMARY KEY, ROWID;

-- Materialized View

CREATE MATERIALIZED VIEW TABLE_MV

REFRESH FAST ON COMMIT

AS

SELECT TABLE_FATHER.ID ID_FATHER,

TABLE_FATHER.TEXT TEXT_FATHER,

TABLE_CHILD.ID ID_CHILD,

TABLE_CHILD.TEXT TEXT_CHILD,

TABLE_FATHER.ROWID FATHER_ROWID,

TABLE_CHILD.ROWID CHILD_ROWID

FROM TABLE_FATHER,

TABLE_CHILD

WHERE TABLE_FATHER.ID = TABLE_CHILD.ID_FATHER (+);

此时您可以验证,第一个结果

INSERT INTO TABLE_CHILD(ID, TEXT, ID_FATHER) VALUES(3, 'child3', 1);

COMMIT;

SELECT * FROM TABLE_MV;

然后第二个结果

UPDATE TABLE_CHILD SET TEXT = 'child33' WHERE ID = 3;

COMMIT;

SELECT * FROM TABLE_MV;

然后第三个结果

INSERT INTO TABLE_FATHER(ID, TEXT) VALUES(2, 'father2');

COMMIT;

SELECT * FROM TABLE_MV;

如您所见,Materialized View在最后一种情况下不会刷新 . 我猜可能是什么问题,但我想先看看你的解释 . 我希望我做错了,这不是一种MView限制问题 . 我正在研究Oracle 11g版本11.2.0.1.0 .

非常感谢你的帮助

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值