Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

A tabela criada em um procedimento é descartada, obtendo erro de compilação para o procedimento


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.