我创建了一个物化视图。
CREATE MATERIALIZED VIEW apps.RPRO_BILLED_CONTRACTS_MV
REFRESH COMPLETE
START WITH SYSDATE
NEXT (sysdate+1/1440) with rowid
AS "query";
它已成功创建并在select *操作上返回行。 但是我想检查它是否令人耳目一新,事实证明它不是。 我将手动刷新命令运行为:
BEGIN
DBMS_SNAPSHOT.REFRESH('RPRO_BILLED_CONTRACTS_MV');
end;
现在返回错误: 错误报告
ORA-32411: materialized view definition query exceeds the maximum length
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2563
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2776
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2745
ORA-06512: at line 2
32411. 0000 - "materialized view definition query exceeds the maximum length"
*Cause: The materialized view definition query exceeds the 64K limit.
*Action: Change the materialized view definition query so that it does not exceed
the maximum length of 64K.
我很困惑,如果查询太长,视图是如何创建并返回值而不是刷新的。请帮忙。
答案 0 :(得分:0)
实体化视图的CREATE
流程与REFRESH
流程不同。
在CREATE
期间,可以使用任何长度的SQL语句创建实体化视图。在REFRESH
期间,强制执行下面描述的64K限制:
http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_6002.htm
可能的解决方法是链接物化视图创建。如果您可以将查询细分为较小的块,则可以使用自身引用实体化视图的子查询来构建最终的物化视图。