创建实体化视图时出现 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
;
现在我正在使用物化视图并尝试创建测试物化视图:
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
;