Oracle 21c创建带ON STATEMENT子句的物化视图报错ORA-32428求助
ORA-32428:Oracle 21c ON STATEMENT物化视图创建失败解决办法
问题根源
ORA-32428错误触发的核心原因:ON STATEMENT刷新模式的物化视图不支持在SELECT列表中显式包含基表的ROWID作为自定义列。尽管你的物化视图基于单表,但Oracle对ON STATEMENT类型的MV有严格结构限制,显式引用ROWID会被判定为不支持的视图形态。
修复方案
方案1:移除ROWID列(推荐,若业务无需存储ROWID)
修改物化视图创建语句,去掉对基表ROWID的显式选择:
CREATE MATERIALIZED VIEW mv3 BUILD DEFERRED REFRESH FAST WITH ROWID ON STATEMENT ENABLE QUERY REWRITE AS SELECT COL1, COL2 FROM tbl1;
方案2:切换刷新模式(若必须保留ROWID)
如果业务逻辑需要在物化视图中存储基表ROWID,可以将刷新模式改为ON COMMIT,该模式支持显式引用ROWID:
CREATE MATERIALIZED VIEW mv3 BUILD DEFERRED REFRESH FAST WITH ROWID ON COMMIT ENABLE QUERY REWRITE AS SELECT rowid rid, COL1, COL2 FROM tbl1;
额外提示
- 你创建的基表物化视图日志语句是正确的,无需调整;
- ON STATEMENT刷新的物化视图还有其他限制:不支持复杂聚合、多表连接(除非满足特定条件)、子查询等,单表场景下也需避免显式引用ROWID这类特殊结构。
内容的提问来源于stack exchange,提问作者Erik
相关产品推荐
相关产品推荐

