O código que precisa verificar se existe uma tabela indica arquitetura de software ruim. Não deve haver necessidade de criar tabelas em tempo real. É um anti-padrão (pelo menos no Oracle). No entanto, vemos variações nesse problema com bastante frequência, então é óbvio que esse antipadrão está prosperando na natureza.
Se você realmente precisa implementar tal solução (por qualquer motivo), a abordagem correta é separar o código de construção de tabela da tabela usando código. Tenha pacotes separados para eles.
begin
pkg_ddl.build_table_xyz;
pkg_calc.run_xyz_job;
end;
Se a tabela XYZ não existir
pkg_calc.run_xyz_job()
é inválido. No entanto, sua invalidade não impedirá pkg_ddl.build_table_xyz()
de executar. Então, quando o programa externo chama pkg_calc.run_xyz_job()
ele irá compilar o procedimento.