Quando se compila um objeto que é referenciado por vários outros objetos, estes ficam inválidos até que sejam recompilados novamente, coisa que o Oracle deveria fazer e, de alguma maneira, as vezes não faz.
Então aqui vai uma dica para quem tem de compilar várias packages, procedures e/ou functions inválidas diariamente devido à esta falha do Oracle.
Existe um comando que força o banco a compilar todos os objetos inválidos sob um determinado usuário, o comando é:
exec dbms_ultility.compile_schema(<USUARIO>);
Substitua por user onde está <USUARIO> se os objetos estiverem sob o usuário que está conectado, ou pelo nome de usuário correspondente.
O comando demora um pouco para ser executado e não compila todos os objetos que estão inválidos por erro de codificação, para descobrir quais objetos estão inválidos, você pode executar a seguinte query:
select object_name from all_objects where status = 'INVALID'
Será listado os objetos que estão inválidos na base.