创建实体化视图时出现 ORA-12054

ORA-12054 while creating Materialized View

现在我正在使用物化视图并尝试创建测试物化视图:

  create table ma_user.test_mview
(
  col1 int,
  col2 int,
  date_col timestamp
)

insert all
  into ma_user.test_mview values (1,1,SYSDATE)
  into ma_user.test_mview values (1,2,SYSDATE + 10/1440)
  into ma_user.test_mview values (1,2,SYSDATE + 30/86400)
  into ma_user.test_mview values (2,1,SYSDATE + 1/48)
  into ma_user.test_mview values (2,2,SYSDATE + 1/24)
  into ma_user.test_mview values (2,2,SYSDATE + 1/72)
  into ma_user.test_mview values (2,3,SYSDATE + 1/96)
  SELECT * FROM dual;

  CREATE MATERIALIZED VIEW ma_user.test_mat_view1
BUILD IMMEDIATE
REFRESH
complete
ON COMMIT
as
  select col1,col2 from ma_user.test_mview
  where current_date > date_col;

但是我得到一个错误:

ORA-12054: cannot set the ON COMMIT refresh attribute for the materialized view.

也许我应该在 ON_DEMAND 上更改 ON COMMIT

由于您在查询中使用了 current_date 函数,因此无法发布工作。将其更改为按需。它会起作用。

同时为您的 table 创建一个主键。

两种刷新执行方式分别是ON COMMIT和ON DEMAND。根据您创建的具体化视图,某些选项可能不可用。

提交中

当修改了具体化视图的详细信息之一的事务提交时,会自动刷新 table。只要实体化视图可快速刷新(换句话说,不复杂),就可以指定此项。使用此模式需要 ON COMMIT 权限。

按需

当用户手动执行 DBMS_MVIEW 包(REFRESH、REFRESH_ALL_MVIEWS、REFRESH_DEPENDENT)中包含的可用刷新过程之一时,就会发生刷新。

Working for me: -


CREATE MATERIALIZED VIEW test_mat_view1
BUILD IMMEDIATE
REFRESH COMPLETE
ON COMMIT
as
  select col1,col2 from test_mview
 -- where current_date > date_col
  ;