I have a view that I can access through a database link as such:
SQL> select count(*) from REMOTE_SCHEMA.REMOTE_VIEW@REMOTE_DB;
COUNT(*)
--------
110
I can create and successfully query the remote view through a synonym:
SQL> create synonym REMOTE_VIEW for REMOTE_SCHEMA.REMOTE_VIEW@REMOTE_DB;
Synonym created
SQL> select count(*) from REMOTE_VIEW;
COUNT(*)
--------
110
If I try to create a materialized view using the synonym however, it fails:
SQL> create materialized view REMOTE_MV
build immediate
refresh complete
next sysdate+1
with ROWID
as
select * from REMOTE_VIEW;
ORA-00942: table or view does not exist
Creating the materialized view without the synonym succeeds:
SQL> create materialized view REMOTE_MV
build immediate
refresh complete
next sysdate+1
with ROWID
as
select * from REMOTE_SCHEMA.REMOTE_VIEW@REMOTE_DB;
Materialized view created
Any ideas why using the synonym fails? Ideally I would like to use the synonym to insulate the materialized view from the database link. The database link could differ based on environment and I want to ensure the materialized view query remains the same regardless.
Best Answer
You cannot create Materialized View from Synonym. I don't know why would you like to that but we create materialized view as your working example.