Oracle SQL — Материализованное представление — быстрое обновление с вызовом пакета выдает ошибку «сложный запрос»

#sql #oracle #view #materialized-views #fast-refresh

#sql #Oracle #Вид #материализованные представления #быстрое обновление

Вопрос:

У меня есть материализованное представление, и мне нужно добавить определенную функциональность в один из столбцов, включенных в MView. Функциональность заключается в вызове определенного пакета, если значение столбца равно Y, в противном случае просто примите как есть. Я знаю, что мы не можем использовать DECODE для быстрого обновления, поэтому я попытался использовать UNION ALL и разделить его на 2 запроса.

 create materialized view test_mview  ( col1, col2, .. ) build immediate fast refresh  with primary key as select p_tes_pkg(ta.col1), ta.col2,..  from table_a ta, table_b tb, table_c tc  where ta.id = tb.ta_id   and tb.code = tc.tb_code   and ta.col1 = 'Y'   and tb.type in ('ABC','DEF')  and tb.type_id is not null  and ta.code = tc.ta_code  and regexp_like (ta.name, '^[[:digit:]] 

Это все еще дает ту же ошибку. Итак, я попытался создать представление с помощью запроса select и использовать его для создания MView. Все та же ошибка. Пожалуйста, помогите и заранее спасибо.

Ошибка:

 ORA-12015: cannot create a fast refresh materialized view from a complex query 12015. 00000 - "cannot create a fast refresh materialized view from a complex query" *Cause: Neither ROWIDs and nor primary key constraints are supported for  complex queries. *Action: Reissue the command with the REFRESH FORCE or REFRESH COMPLETE  option or create a simple materialized view.  

Комментарии:

1. вы должны указать структуру таблиц и пакета. Используйте case вместо decode

2. Вы можете использовать dbms_view.explain_mview, чтобы узнать, почему возникает ошибка.

3. @RobertoHernandez, я попробовал case вместо декодирования. Но без вызова пакета он создает MView, но с его помощью я получаю эту ошибку.

) union all select ta_2.col1, ta_2.col2,.. from table_a ta_2, table_b tb_2, table_c tc_2 where ta_2.id = tb_2.ta_id and NVL(ta_2.col1,'N') = 'N' and tb_2.code = tc_2.tb_code and tb_2.type in ('ABC','DEF') and tb_2.type_id is not null and ta_2.code = tc.ta_code and regexp_like (ta_2.name, '^[[:digit:]]Это все еще дает ту же ошибку. Итак, я попытался создать представление с помощью запроса select и использовать его для создания MView. Все та же ошибка. Пожалуйста, помогите и заранее спасибо.

Ошибка:


Комментарии:

1. вы должны указать структуру таблиц и пакета. Используйте case вместо decode

2. Вы можете использовать dbms_view.explain_mview, чтобы узнать, почему возникает ошибка.

3. @RobertoHernandez, я попробовал case вместо декодирования. Но без вызова пакета он создает MView, но с его помощью я получаю эту ошибку.

) ;

Это все еще дает ту же ошибку. Итак, я попытался создать представление с помощью запроса select и использовать его для создания MView. Все та же ошибка. Пожалуйста, помогите и заранее спасибо.

Ошибка:


Комментарии:

1. вы должны указать структуру таблиц и пакета. Используйте case вместо decode

2. Вы можете использовать dbms_view.explain_mview, чтобы узнать, почему возникает ошибка.

3. @RobertoHernandez, я попробовал case вместо декодирования. Но без вызова пакета он создает MView, но с его помощью я получаю эту ошибку.