Tenho uma tabela ( OBJECTS_TO_UPDATE
) com vários objetos que preciso atualizar, alguns são SYNONYMs
para objetos que não existem mais.
Eu quero criar uma consulta para listá-los. Mas estou preso.
Minha tabela OBJECTS_TO_UPDATE
tem essas colunas:
OBJECT_NAME
OBJECT_TYPE
OWNER
Em palavras, o que eu quero fazer segue estas linhas:
- Eu filtro minha
OBJECTS_TO_UPDATE
tabela porOBJECT_TYPE = 'SYNONYM'
. - Usando o proprietário e o nome, posso obter o
SYNONYM
arquivoALL_SYNONYMS
. - Usando
TABLE_OWNER
eTABLE_NAME
e procure por ele em dba_objects, se o objeto não existir, então o sinônimo não é mais válido.
Quero escrever uma consulta usando todas essas condições, mas estou tendo problemas.
select *
from OBJECTS_TO_UPDATE o2u
where o2u.OBJECT_TYPE = 'SYNONYM' and NOT EXISTS (
--select * from dba_objects dobj
--where dobj.OWNER
select * from ALL_SYNONYMS syn
where syn.OWNER = o2u.OWNER and syn.SYNONYM_NAME = o2u.OBJECT_NAME)
Estou preso/confuso sobre o que fazer dentro do arquivo NOT EXISTS
.
Como posso conseguir o que preciso? Eu tenho DBA privs.
Além disso, esta é a melhor maneira de conseguir o que eu quero? Talvez haja algumas outras visualizações que eu deva usar de forma mais direta.
Você pode consultar a
ALL_OBJECTS
exibição paraobject_type = 'SYNONYM'
estatus != 'VALID'
. No entanto, o status de all_objects é definido com base no status do objeto ao qual ele está se referindo. Sinônimos, que não são invalidados automaticamente se a tabela subjacente desaparecer. Portanto, aSTATUS
coluna deALL_OBJECTS
não é confiável de usar.Tente usar esta consulta:
Não consegui usar a opção sugerida pelo BriteSponge porque o valor da COLUMN Status em ALL_OBJECTS não me parece confiável. Consegui encontrar um SINÔNIMO com status VÁLIDO, mas o objeto para o qual apontava não existia.
A lista de objetos que desejo atualizar é a tabela OBJECTS_TO_UPDATE. Consegui listar todos os sinônimos da tabela OBJECTS_TO_UPDATE que apontavam para um objeto que não existia mais com a seguinte consulta: