Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 CREATE MATERIALIZED VIEW REFRESH FAST с вычисляемым значением  [new]
Alexandr Kozhin
Member

Откуда: Санкт-Петербург
Сообщений: 2
Здравствуйте.
Есть вот такой запрос:
SELECT s.store_item_id,
  extractvalue(xmltype(s.item_requisites),   '/*[1]/format'),
  ff.file_name,
  ffr.root_path || ff.file_dir || ff.file_name
FROM store s 
JOIN store_file sf 
  ON(sf.store_item_id = s.store_item_id) 
JOIN fs_file ff 
  ON(sf.file_id = ff.file_id) 
JOIN fs_file_root ffr 
  ON(ffr.file_root_id = ff.file_root_id);


Подскажите как правильно создать материализованное представление с типом обновления FAST.
При попытке создания получаю ошибку ORA-12014
Для всех таблиц созданы логи с параметром WITH ROWID

Структура таблиц на рисунке:
Картинка с другого сайта.

Заранее спасибо.
24 апр 13, 11:35    [14222770]     Ответить | Цитировать Сообщить модератору
 Re: CREATE MATERIALIZED VIEW REFRESH FAST с вычисляемым значением  [new]
Ivan K
Member

Откуда: Москва
Сообщений: 304
Alexandr Kozhin,
Как-то так...

drop MATERIALIZED VIEW  mv;
drop MATERIALIZED VIEW  store_mv;


drop MATERIALIZED VIEW  log on store ;
drop MATERIALIZED VIEW  log on store_mv ;
drop MATERIALIZED VIEW  log on store_file ;
drop MATERIALIZED VIEW  log on fs_file_root;

drop table store purge;
drop table store_file purge;
drop table fs_file purge;
drop table fs_file_root purge ;


create table store
(store_item_id number primary key
,item_requisites CLOB
);
CREATE MATERIALIZED VIEW  log on store WITH ROWID(store_item_id)  INCLUDING NEW VALUES;


create table store_file
(store_item_id number primary key
,file_id number not null
);
CREATE MATERIALIZED VIEW log on store_file WITH ROWID(store_item_id ,file_id)  INCLUDING NEW VALUES;


create table fs_file
(file_id number primary key
,file_root_id number not null
);
CREATE MATERIALIZED VIEW log on fs_file WITH ROWID(file_id,file_root_id)  INCLUDING NEW VALUES;


create table fs_file_root
(file_root_id number primary key
);
CREATE MATERIALIZED VIEW log on fs_file_root WITH ROWID(file_root_id)  INCLUDING NEW VALUES;


CREATE MATERIALIZED VIEW  store_mv
REFRESH FAST with rowid 
as
SELECT s.store_item_id store_item_id
,  extractvalue(xmltype(s.item_requisites),   '/*[1]/format') item_requisites
from store s
;

create materialized view log on store_mv WITH SEQUENCE, ROWID(store_item_id,item_requisites) ;



CREATE MATERIALIZED VIEW  mv 
REFRESH FAST with rowid
as
SELECT s.rowid col1
,sf.rowid col2
,ff.rowid col3
,ffr.rowid col4
,s.store_item_id col5
,s.item_requisites col6
from store_mv s,store_file sf ,fs_file ff ,fs_file_root ffr 
where (sf.store_item_id = s.store_item_id) 
and (sf.file_id = ff.file_id)
and (ffr.file_root_id = ff.file_root_id)
;

exec DBMS_MVIEW.REFRESH('STORE_MV','COMPLETE');
exec DBMS_MVIEW.REFRESH('MV','COMPLETE');

insert into store(store_item_id,item_requisites) values(1,'<a>1</a>');
insert into store(store_item_id,item_requisites) values(2,'<a>2</a>');
insert into store_file(store_item_id,file_id) values(1,1);
insert into fs_file(file_id,file_root_id) values(1,1);
insert into fs_file_root(file_root_id) values(1);
commit;



exec DBMS_MVIEW.REFRESH('STORE_MV','FAST',NESTED=>TRUE);
exec DBMS_MVIEW.REFRESH('MV','FAST',NESTED=>TRUE);
17 май 13, 14:20    [14311954]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить