Bom, antes de responder lembro que num ambiente Corretamente controlado vc 
Absolutamente não precisaria disto, pois :

 a. todo e qualquer código-fonte (INCLUSIVE stored PL/SQLs) deveria estar 
contido num sistema de Vesrionamento, justamente para controlar as diferentes 
versões/releases

E

 b. na produção, apenas o DBA e/ou (no máximo) um Analista-chefe, que sabe o 
que está fazendo, é quem (mediante uma requisição de alteração formal, que 
MANTÈM um histórico pesquisável!) é quem saem fazendo DDLs de qualquer tipo

 com esses dois fatores, naturalmente vc já teria um histórico E seria capaz de 
fazer rollback de qualquer alteração, em tese.... E AINDA vc tem a vantagem de 
Revisão do Código : por mais perfunctório que seja o review que o 
DBA/Analista-chefe faz, ao menos algum código terrivelmente ineficiente e/ou 
malicioso em alto grau ele pega - se vc deixa qquer um sair colocando código no 
db de produção, salve-se quem puder... 

 Isto posto, a resposta : se realmente o seu ambiente ainda não está otimamente 
controlado e portanto precisa de coisas do tipo, eu não tenho código pronto 
para isso mas tenta adaptar o código mostrado em 
http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:267415465220#4149424900346580446
 , que vc deve ser capaz.... Eu IMAGINO que no seu caso vc teria uma tabela 
pré-criada á semelhança da DBA_SOURCE e no código da tal trigger (que seria 
BEFORE) aí vc identifica o objeto pelas built-ins tipo ora_dict_obj_xxx , 
consulta a DBA_SOURCE e copia as linhas da DBA_SOURCE referentes ao objeto que 
será alterado, penso... A opção de usara DBMS_METADATA também existe mas deve 
ser testada COM CUIDADO EXTREMO, dada a performance nem sempre brilhante dessa 
DBMS....

  []s

    Chiappa

Responder a