Материализованное представление для вложенного sql запроса

GrandMaster
Дата: 07.06.2006 21:19:28
Не могу создать материализованное представление для вложенного sql запроса. Выдает ошибку ORA-22818. Как можно решить эту проблему?
SY
Дата: 07.06.2006 21:55:06
Cause
This is expected behaviour and is now documented in the 10i Data Warehousing manuals.

The following has been added as a restriction for create materialized view -

You cannot define a materialized with a subquery in the select list of the defining query. You can, however, include subqueries elsewhere in the defining query, such as in the WHERE clause


Create a regular view and then create a MV for it:

SQL> create materialized view emp_mview as select empno, (select 1 from dual) X from emp;
create materialized view emp_mview as select empno, (select 1 from dual) X from emp
                                                                         *
ERROR at line 1:
ORA-22818: subquery expressions not allowed here


SQL> create view emp_vw as select empno, (select 1 from dual) X from emp;

View created.

SQL> create materialized view emp_mview as select * from emp_vw;

Materialized view created.

SQL> 

SY.
GrandMaster
Дата: 07.06.2006 22:48:51
Чего то не получаеться. Создал view. А затем из нее попытался сделать матриализованное представление. Не получаеться. Выдает ту же самую ошибку.

Моя версия Oracle:
Oracle Database 10g Realase 10.1.0.2.0
SY
Дата: 07.06.2006 22:58:38
Post your code.

SY.
GrandMaster
Дата: 08.06.2006 14:42:36
Вот пример того как не получаеться

create or replace view v as
select * from
(
select (select 1 from dual) b from dual
) z


create materialized view mv_main as select * from v;
Ловец Стрекоз
Дата: 08.06.2006 15:09:57
GrandMaster
Не могу создать материализованное представление для вложенного sql запроса. Выдает ошибку ORA-22818.


А для чего может потребоваться создавать MV для выборки с подзапросом? Как Вы для себя понимаете для чего нужны MV?
GrandMaster
Дата: 08.06.2006 15:20:31
Вообщем это долгая история. Создать просто представление неэфективно, так как запрос выполняеться очень долго, а работать с этим запросом надо много.
Придеться ждать постоянно.
Wise Wolf
Дата: 28.07.2006 09:44:31
Никак!

Читайте документацию по Ораклу:

Oracle® Database Data Warehousing Guide
10g Release 2 (10.2)
Part Number B14223-01

Там чёрным по белому написано, какие есть ограничения для создания Матьюшек
SY
Дата: 28.07.2006 17:30:28
GrandMaster
Вот пример того как не получаеться



I thought I explained it:

SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE    10.2.0.1.0      Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production

SQL> create materialized view mv_main as
  2  select (select 1 from dual) b from dual;
select (select 1 from dual) b from dual
                            *
ERROR at line 2:
ORA-22818: subquery expressions not allowed here


SQL> create materialized view mv_main as
  2  select * from
  3  (
  4  select (select 1 from dual) b from dual
  5  ) z
  6  /
select (select 1 from dual) b from dual
                            *
ERROR at line 4:
ORA-22818: subquery expressions not allowed here


SQL> create or replace view v as
  2  select (select 1 from dual) b from dual;

View created.

SQL> create materialized view mv_main as
  2  select * from v;

Materialized view created.

SQL> drop materialized view mv_main;

Materialized view dropped.

SQL> create or replace view v as
  2  select * from
  3  (
  4  select (select 1 from dual) b from dual
  5  ) z
  6  /

View created.

SQL> create materialized view mv_main as
  2  select * from v;

Materialized view created.

SQL> 

SY.
P.S. Posting failing code also implies posting code execution with all errors.
mv_user
Дата: 29.07.2009 09:09:40
У меня такая же проблема
Только Оракл 9.2

Так что решение, предложенное SY не прокатывает, оно похоже для 10-ки и выше.
Т.е. если создать обычную вьюху, а по ней мат.представление - выдаётся та же самая 22818.

Чё делать?


ЗЫ. Пояснение, для чего это нужно. Есть здоровая обычная вьюха, которая работает очень медленно, а данные базовых таблиц обновляются пакетно и раз в сутки.
Так что если вместо обычной вьюхи создать мат. с обновлением раз в день, то все проблемы со скоростью исчезают.