Pergunta

Eu observei recentemente que chamar DBMS_MVIEW.UPDATE (...), que refresca visualizações materializadas em Oracle, tem uma implícita cometer.

Todas as idéias - que não seja "porque ele faz?" - porque esta ação tem cometer um implícito

Foi útil?

Solução

Dependendo da sua versão Oracle e / ou os parâmetros que você fornecer DBMS_MVIEW.UPDATE pode estar fazendo um TRUNCATE seguido por uma carga direta. TRUNCATE é um comando DDL e, como tais questões cometer um implícito. carga direta não requer uma confirmação.

Se você estiver usando uma versão mais recente da Oracle, eu acho 10.2+, você pode definir o parâmetro atomic_refresh para TRUE e vai refrescar em uma única transação, usando / inserções de DELETE padrão. Este método poderia ser um pouco mais lento embora.

Outras dicas

De acordo com Tom Kyte é porque uma decisão foi tomada em tempo de design a considerar refrescante para ser um operação DDL. Desde todas as operações DDL cometer implicitamente, o mesmo acontece com este. Infelizmente ele não responder à pergunta resultando de por que eles escolhem para torná-lo DDL.

Um espalhados trabalho é fazer a chamada para DBMS_MVIEW.UPDATE em uma transação autônoma (criar um procedimento PL / SQL com autonomous_transaction pragma).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top