物化视图已成功创建,但在刷新时提供了太长的查询错误

时间:2014-05-15 09:31:51

标签: sql plsql oracle11g materialized-views

我创建了一个物化视图。

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.

我很困惑,如果查询太长,视图是如何创建并返回值而不是刷新的。请帮忙。

1 个答案:

答案 0 :(得分:0)

实体化视图的CREATE流程与REFRESH流程不同。

CREATE期间,可以使用任何长度的SQL语句创建实体化视图。在REFRESH期间,强制执行下面描述的64K限制:

http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_6002.htm

可能的解决方法是链接物化视图创建。如果您可以将查询细分为较小的块,则可以使用自身引用实体化视图的子查询来构建最终的物化视图。