CftClub.ru
Клуб специалистов ЦФТ-Банк

Материализованное представление.

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> АРМы
Предыдущая тема :: Следующая тема  
Автор Сообщение
MMT
Участник


Вступление в Клуб: 18.10.2010
СообщениеПн Окт 18, 2010 12:33   Материализованное представление. Ответить с цитатой
Полезность: Нет оценки
Доброго дня. Подскажите как можно используя АСД (Администратор словаря данных), создать MATERIALIZED VIEW или же использовать готовое MVIEW в АСД при написаний функций.
lexus
Профи


Вступление в Клуб: 28.09.2007
СообщениеПн Окт 18, 2010 12:59    Ответить с цитатой
Полезность: Нет оценки
Создать MV в Админе нельзя. Только sql'ем.
А использовать существующее из операции можно.
Вроде надо было включить query_rewrite_enabled. Возможно, на 10g этого уже не требуется... Не проверял.

Код:
-- begin pl/sql
execute immediate 'alter session set query_rewrite_enabled=true';
dbms_mview.refresh('IBS.MV$FACT_OPER');
-- end pl/sql


Ну и далее Oracle сам запрос на это представление перенаправит.
MMT
Участник


Вступление в Клуб: 18.10.2010
СообщениеПн Окт 18, 2010 13:54    Ответить с цитатой
Полезность: Нет оценки
lexus спасибо за ответ.
1. Что в Админе создать MV нельзя я понял.
2. Вопрос задам поккоректнее: Как сделать так чтобы АСД увидел MV созданное через sql.

Обновление MV не требуется
dbms_mview.refresh ? - зачем он мне.

CREATE MATERIALIZED VIEW CLIENT_DETAIL - т.е. есть MV: CLIENT_DETAIL
Как использовать MV в написаний функций:
--begin pl\sql
function pasport (cl_id integer) return varchar2 is
rez varchar2(1000);
begin
for cl_pass in
(select c_num
from client_detail
where id = cl_id
) loop
rez := '№ '||cl_pass.c_num;
end loop;
return rez;
end;
--end pl\sql
svn
Профи


Вступление в Клуб: 04.02.2008
СообщениеПн Окт 18, 2010 15:18    Ответить с цитатой
Полезность: Нет оценки
Обновление MV не требуется - а зачем тогда вообще городить такой огород? почему тогда не обычный справочник или структура?
MMT
Участник


Вступление в Клуб: 18.10.2010
СообщениеВт Окт 19, 2010 06:42    Ответить с цитатой
Полезность: Нет оценки
обновление происходит ежедневно в определенное время.
lexus
Профи


Вступление в Клуб: 28.09.2007
СообщениеВт Окт 19, 2010 07:06    Ответить с цитатой
Полезность: Нет оценки
в таком случае - refresh убрать, конечно.
query_rewrite_enabled включить.
Для большей точности - посмотрите оракловую документацию по MV.

MV создавал под конкретный запрос
Код:
<...>
AS
SELECT   A1.ID,
         A1.COLLECTION_ID COLLECTION_ID,
         A1.C_DATE C_DATE,
         A1.C_SUMMA C_SUMMA
  FROM   ibs.Z#FACT_OPER A1
 WHERE   A1.COLLECTION_ID IS NOT NULL
         AND (A1.C_OPER = 2052198 AND A1.C_IS_STORNO = '0');


При этом курсор в операции
Код:
type TypeGIVECur is
   select GIVE(GIVE%collection            : CollId,
            min(GIVE.[DATE])         : DATE_OP,
            sum(GIVE.[SUMMA])         : Summa
            )
   in ::[FACT_OPER] all
   where GIVE%collection is not null and GIVE.[OPER] = ::[VID_OPER_DOG]([ CODE ] = 'ВЫДАЧА_КРЕДИТА')
   and GIVE.[IS_STORNO]='0'
   group by GIVE%collection;

начинал бегать по MV (судя по трейсу и по сокращению времени выполнения)

То есть, нет нужды писать селект из MV. Оракл сам оптимизирует выборку - перенаправляет вместо таблички на MV.


PS Вспомнилась основная засада, почему мы тогда так и не смогли использовать MV "по-настоящему". При явном запуске операции все было красиво. А при выполнении того же запроса из джоба - MV Ораклом не использовалось. Баг в Оракл регили. Судьбу его не знаю Sad
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> АРМы Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru