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

Откуда: Москва
Сообщений: 2076
Добрый день!
Есть табличка у которой primary key состоит из 20 полей.. структуру менять нельзя.
часто нужно проводить сложные операции по модификации данных в этой таблице (~20млн. записей)
и очень неудобно то что очень тяжело позиционировать конкретную строку (писать условие из 20 полей как то задалбливает)
создал materialized View где добавил дополнительное поле состоящее из значений 20 полей primary key
Для отчетов все это на ура работает, но вот как обновить запись в таблице на основе которой создан materialized View используя это дополнительное поле -))
Тут скорее вопрос не по materialized View а теоретический, можно ли ввести вычисляемое уникальное поле и использовать его в операциях update в качестве PK..
27 ноя 08, 14:07    [6494912]     Ответить | Цитировать Сообщить модератору
 Re: Вопросик про materialized View  [new]
UDW
Member

Откуда: Самара
Сообщений: 1096
Если на MV повесить триггер, который расшифрует Ваш PK в ключевые поля родительской таблицы - почему нет?
27 ноя 08, 20:08    [6497225]     Ответить | Цитировать Сообщить модератору
 Re: Вопросик про materialized View  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18351
create table ane_test(a number, b number, val varchar2(100), constraint ane_test_pk primary key(a,b));
Table created

insert into ane_test select rownum, rownum*11, 'Val'||rownum from dual connect by level < 4;
3 rows inserted

create view ane_test_v as select a||'#'||b pkey, val from ane_test;
View created

create trigger ane_test_v_iur
instead of update
on ane_test_v
for each row
begin
  update ane_test set val = :new.val
  where a=substr(:new.pkey,1,instr(:new.pkey,'#')-1)
    and b=substr(:new.pkey,instr(:new.pkey,'#',1,1)+1);
end;
/
Trigger created

update ane_test_v set val='new val' where pkey = '1#11';
1 row updated

select * from ane_test_v;
 
PKEY                 VAL
-------------------- --------------------
1#11                 new val
2#22                 Val2
3#33                 Val3
 
SQL> 
27 ноя 08, 20:22    [6497254]     Ответить | Цитировать Сообщить модератору
 Re: Вопросик про materialized View  [new]
Ден
Member

Откуда: Москва
Сообщений: 2076
вариант с тригером понял..
тока с простой вьюхой не прокатит, так как записей много, а мне вычисляемый PK нужен чтоб быстро Update конкретной записи делать. А индекс по этому вычисляемому полю не создать..
можно так сделать на m view, тригер повесить и изменять записи в мастер таблице при обновлении в m view.. в тестовых средах я вводил служебное поле с юникальным индексом, в продакшен нехочу трогать структуру (это ERP).
28 ноя 08, 13:23    [6499939]     Ответить | Цитировать Сообщить модератору
 Re: Вопросик про materialized View  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18351
Ден
вариант с тригером понял..
тока с простой вьюхой не прокатит, так как записей много, а мне вычисляемый PK нужен чтоб быстро Update конкретной записи делать. А индекс по этому вычисляемому полю не создать..

Значит, не поняли пример.
Обновляется оригинальная таблица по составному PK, т.е. с применением соответствующего индекса.
Если Вас беспокоит выборка из view по вычисляемому полю, то можно и индекс создать (см. FBI), и даже Ваше готовое mat. view использовать.
28 ноя 08, 13:29    [6499970]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить