Renata, PMFJI mas coloco uma obs : pode ter CERTEZA de que se o objeto que 
ficou inválido não referencia diretamente a coluna alterada, ALGUMA outra 
referência indireta tem SIM : ele talvez chama uma outra rotina PL/SQL que aí 
sim referencia a coluna, ou faz um SELECT * na tabela que possui a coluna, ou 
usa um TYPE ou um REF CURSOR que acessa a coluna, enfim, algum tipo de 
dependência MESMO que indireta tinha sim, blz ??
O que EU costumo fazer é simplesmente depois de ter feito DDLs é rodar um 
script  que me LISTA os objetos que ficaram inválidos após o DDL e já mostra os 
compiles que tenho que fazer, tipo :

select 'alter '||decode(OBJECT_TYPE,'PACKAGE BODY','PACKAGE',OBJECT_TYPE)||' 
'||OWNER||'.'||OBJECT_NAME||' compile;'
from ALL_OBJECTS
where STATUS <> 'VALID'
and OBJECT_TYPE <> 'SYNONYM'
union ALL
select 'create or replace public synonym '||OBJECT_NAME||' for 
'||OBJECT_NAME||';'
from ALL_OBJECTS
where STATUS <> 'VALID'
and OBJECT_TYPE = 'SYNONYM'
/
select 'alter trigger '||OWNER||'.'||TRIGGER_NAME||' enable;'
from ALL_TRIGGERS
where STATUS <> 'ENABLED'
/


Muitas vezes essa cadeia de dependências (tipo, proc A chama proc B que usa 
TYPE T que aí sim referencia a coluna, digamos) pode FACILMENTE ficar bem 
complexa de acompanhar, então eu nem perco tempo e já compilo tudo que está 
marcado como INVÁLIDO após meu DDL, okdoc ??

[]s

  Chiappa

Responder a