Senhores, bom dia.
** Oracle 11.2.0.4 EE.

Alguns desenvolvedores estão testando recriar uma view materializada que 
precisa ser modificada. Consultando a view dba_objects com o nome da MV, temos:
SQL> SELECT * FROM DBA_OBJECTS WHERE OBJECT_NAME = 'XUXA'
Que me retorna duas linhas:
Uma linha com o tipo de objeto **MV** e  a outra linha do tipo **TABLE**.
Para alterar o código do view, o desenvolvedor dropou e recriou a view, segue:
SQL> DROP MATERIALIZED VIEW XUXA;
SQL> CREATE MATERIALIZED VIEW XUXA
REFRESH FAST  ON DEMAND
WITH PRIMARY KEY
AS
SELECT COL1,
       COL2,
       COL3
FROM XUXA;
ORA-00955: nome já está sendo usado por um objeto existente

** Minha primeira dúvida é a seguinte:
Como é que poderia existir em minha base anteriormente, e que estava 
funcionando, uma MV que continha o mesmo nome de uma tabela e que essa mesma 
tabela fazia parte da consulta da MV?


Olhando pelo lado lógico do problema (até onde eu sei), uma materialized view 
apenas guarda o metadados (definição da consulta, período de atualização, tipo 
de atualização, etc), e quando uma MV é criada, o RDBMS Oracle, implicitamente, 
cria uma tabela "por baixo" que é justamente aonde o RDBMS Oracle irá buscar os 
dados. 

Pesquisando mais um pouco, percebi que existe uma forma de criar uma view 
materializada com o mesmo nome de uma tabela, mas que essa tabela não pode ser 
usada na mesma consulta da MV, o que não é o meu caso.
Estou precisando de algumas dicas em relação a esse problema que estou 
enfrentando, não posso deixar passar alguns scripts que já estão prontos para 
serem aplicados em produção antes de estar bem seguro em relação a esse 
problema.







Responder a