Depois de uma tentativas desastrada de parcialmente atualizar uma package, precisei usar o flashback para recuperar o código original. Isso é fácil no Oracle:
select text
from all_source as of timestamp sysdate -1/24 --uma hora
where owner=:owner and name=:package_name and type='PACKAGE BODY'
Infelizmente, o SQLDeveloper exporta o texto com linhas adicionais. Contornar isso com um pouco de Perl é simples:
perl -ne "print if !/^$/" package.sql > package_sem_linhas_vazias.sql
Esta linha de Perl imprime todas as linhas do arquivo (último parâmetro) que tiverem alguma coisa (/^$/ é verdadeiro para linhas vazias).